一些RCP 程序开发中可能遇到不同需求的退出,本文总结了三种退出方式。记录如下:
RCP 程序都有实现自IApplication 接口的Application 程序,通过阅读代码很容易发现其start 方法若返回IApplication.EXIT_OK ,则程序会被退出。这种退出可以用来做登陆等业务逻辑。
Application 代码示例如下:
package com.xzbd;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;
import com.xzbd.advisor.ApplicationWorkbenchAdvisor;
public class Application implements IApplication {
@Override
public Object start(IApplicationContext context) {
Display display = PlatformUI.createDisplay();
try {
int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART) {
return IApplication.EXIT_RESTART;
}
return IApplication.EXIT_OK;
} finally {
display.dispose();
}
}
@Override
public void stop() {
if (!PlatformUI.isWorkbenchRunning())
return;
final IWorkbench workbench = PlatformUI.getWorkbench();
final Display display = workbench.getDisplay();
display.syncExec(() -> {
if (!display.isDisposed())
workbench.close();
});
}
}
如果我们的RCP 应用需要如Eclipse 退出菜单一样的推出方式,那么可以采用这种方案。通过File -> Exit,即可打开Eclipse退出菜单,如下: Eclipse 退出菜单使用的是ActionFactory.QUIT.create(window) 创建的IWorkbenchAction ,可通过如下代码调用
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IWorkbenchAction quitWorkbenchAction = ActionFactory.QUIT.create(window);
quitWorkbenchAction.run();
这种方式又来已久,所有的运行于JVM 上的程序都可以退出,其中status 有两个值0和1。System.exit(0)表示正常退出JVM ,而System.exit(1)表示异常退出JVM 。
这种方式虽然万能,但偏于暴力。在RCP 程序中建议使用前两种方式退出,这样可以保证程序退出时能释放一些资源,或做一些程序退出时的业务。
|