2013-10-21 35 views
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 stuck at Unsafe.park

这是一个已知的JVM的bug某种?

+2

请阅读'finally'的功能。 –

+0

该方法应该总是抛出异常,这在我的特殊情况下不会发生。我知道finally块将始终执行。 – rationalrevolt

+0

你怎么知道这不是在这种特殊情况下发生的? –

回答

0

我错了。断点在catch块上断了。由于此异常发生在后台SwingWorker线程中,并且我对最终结果不感兴趣(不是调用get方法中的get),Swing吞噬了异常。