VMStartEvent之后的Java VM挂起
VMStartEvent之后,虚拟机挂起到此行VMStartEvent之后的Java VM挂起,java,java-7,jdi,Java,Java 7,Jdi,VMStartEvent之后,虚拟机挂起到此行 vm = launchTarget("com.sun.tools.example.trace.Hello", false); EventQueue eventQ = vm.eventQueue(); boolean connected = true; while (connected) { try { EventSet eventSet = queue.remove(); EventIterator
vm = launchTarget("com.sun.tools.example.trace.Hello", false);
EventQueue eventQ = vm.eventQueue();
boolean connected = true;
while (connected) {
try {
EventSet eventSet = queue.remove();
EventIterator it = eventSet.eventIterator();
while (it.hasNext()) {
handleEvent(it.nextEvent());
}
eventSet.resume();
} catch (InterruptedException exc) {
// Ignore
} catch (VMDisconnectedException discExc) {
//handleDisconnectedException();
break;
}
}
VM启动时使用
suspend=false
。根据Javadoc,我使用Java1.7Hmm,删除将阻塞,直到可以执行新事件。所以我想说队列中没有事件。另一方面,Suspend选项只意味着jvm将等待或不等待,直到调试器连接到它。这是两件不同的事情,你能用java代码解释一下吗@philnateI不能,因为我对这个话题不太了解。但是,如果您在javadoc中查找EventQueue.remove()方法,您将看到它将阻塞,直到有新事件可用。看起来这应该是你的循环所做的。所以我不清楚你的问题是什么。对于挂起,简单地用true和false分别尝试一次。如果设置为true,jvm将停止程序的执行,直到调试器连接到它为止。这在早期启动调试期间非常有用,否则很难完成。顺便说一句,接受中断异常可能不是个好主意。
EventSet eventSet = queue.remove();