uri*_*rir 25 java eclipse shutdown-hook
我添加了一个关闭钩子:
Runtime.getRuntime().addShutdownHook(myShutdownHook);
Run Code Online (Sandbox Code Playgroud)
它正常工作正常,但是当我单击Eclipse中的红色停止按钮时则不行.有没有办法在Eclipse中调用关闭钩子?
Zol*_*tán 17
红色停止按钮强行杀死应用程序,即不正常,因此JVM不知道应用程序正在退出,因此不会调用关闭挂钩.
不幸的是,没有办法(至少在Windows中)提供一种机制来确保始终调用钩子.这只是可以调用的东西,但不能保证.
我用一个装饰的JavaProcess替换了一个hack:
IProcess p = launch.getProcesses()[0];
launch.addProcess(new JavaProcessDecorator(p));
launch.removeProcess(p);
Run Code Online (Sandbox Code Playgroud)
装饰器覆盖终止功能.
public class JavaProcessDecorator implements IProcess {
private IProcess p;
public JavaProcessDecorator(IProcess p) {
this.p = p;
}
private boolean sigkill = false;
@SuppressWarnings("rawtypes")
@Override public Object getAdapter(Class arg) { return p.getAdapter(arg); }
...
@Override public ILaunch getLaunch() { return p.getLaunch(); }
@Override public IStreamsProxy getStreamsProxy() { return p.getStreamsProxy(); }
@Override public void setAttribute(String s1, String s2) { p.setAttribute(s1, s2); }
@Override public void terminate() throws DebugException {
if(!sigkill) {
try {
IDebugIService cs = DirmiServer.INSTANCE.getRemote("main", IDebugIService.class);
if(cs != null) cs.modelEvent(new TerminateRequest());
} catch (RemoteException e) { }
this.sigkill = true;
} else p.terminate();
}}
Run Code Online (Sandbox Code Playgroud)
首先点击红色按钮,我向应用程序发送一条消息,要求轻轻终止.如果它不起作用,第二次点击红色按钮将杀死它.
| 归档时间: |
|
| 查看次数: |
15877 次 |
| 最近记录: |