me hizo un corte mediante la sustitución de JavaProcess con un decorado:
IProcess p = launch.getProcesses()[0];
launch.addProcess(new JavaProcessDecorator(p));
launch.removeProcess(p);
y decorador es reemplazar la función termine.
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();
}}
Al hacer clic en el botón rojo, le envío un mensaje a la aplicación solicitando una terminación suave. Si no funciona, el segundo clic en el botón rojo lo matará.
las preguntas se marcan como duplicadas a una pregunta que se hizo 2 años más tarde – urir
en realidad la otra dos años antes (09 en lugar de 11). Probablemente leyó mal el día (13) del año. – Christoph142