0

我有如下代码:

@Override
    protected Void doInBackground() throws Exception {
        try {
            while(true) cpu.step();
        } catch(Throwable t) {
            throw new RuntimeException(t);
        } finally {
            System.out.println("EmulationWorked task completed");
        }
    }

这个循环应该总是通过抛出异常退出,但在我的例子中,我看到控件println没有这样做就到达了语句。

我的 Java/JVM 版本如下:

java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

这个问题与我之前发布的另一个问题中的一个问题有关:Gameboy emulation - SwingWorker 卡在 Unsafe.park

这是某种已知的 JVM 错误吗?

4

1 回答 1

0

我错了。断点确实在 catch 块上中断。由于这个异常发生在后台 SwingWorker 线程中,并且我对最终结果不感兴趣(不在 done 方法中调用 get),所以异常被 Swing 吞没了。

于 2013-10-21T04:09:29.587 回答