2014-05-12 52 views
4

我目前正在嘗試使用JavaFX 8構建應用程序,但是我無法獲取未捕獲的異常處理。由於這篇文章(https://bugs.openjdk.java.net/browse/JDK-8100937)它應該用JavaFX 8(Lombard)修復/實現,但我在網上找不到任何東西...JavaFX 8(Lombard)全局異常處理

我不想走黑客的路,可能你給我一個暗示在哪裏尋找更多信息?

+0

你能給出一個你正在做的事情的例子(代碼)導致這個問題? – SnakeDoc

+0

這不是一個特殊的代碼會導致麻煩,我只是沒有意義尋找關於新實現的異常處理的進一步信息。全局異常處理意味着捕獲未處理的異常,向用戶輸出一條短消息,然後退出。 – bash0r

回答

10

據我所知,沒有什麼值得的;您只需使用java.lang.Thread中的常規未捕獲異常處理。

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class UncaughtExceptionTest extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     // start is called on the FX Application Thread, 
     // so Thread.currentThread() is the FX application thread: 
     Thread.currentThread().setUncaughtExceptionHandler((thread, throwable) -> { 
      System.out.println("Handler caught exception: "+throwable.getMessage()); 
     }); 

     StackPane root = new StackPane(); 
     Button button = new Button("Throw exception"); 
     button.setOnAction(event -> { 
      throw new RuntimeException("Boom!") ; 
     }); 
     root.getChildren().add(button); 
     Scene scene = new Scene(root, 150, 60); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

哇謝謝,這太方便了... – bash0r

+0

是不是有不止一個線程在這裏擔心?恩。 JavaFX應用程序線程?我認爲你需要用Platform.runLater()第二次做這個。 – User

+0

@Manius請參閱代碼 –