2013-10-21 63 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吞噬了異常。