JavaFX launch() 方法,顧名思義,啟動應用程式的圖形使用者介面 (GUI)。然而,launch() 方法施加了嚴格的約束:它不能被多次呼叫。任何後續嘗試呼叫 launch() 都會導致 IllegalStateException。
此限制源自於 JavaFX 的底層執行緒安全特性。一旦應用程式的 GUI 初始化,在應用程式的整個生命週期中維護線程安全至關重要。多次呼叫 launch() 會危及執行緒安全,導致意外行為甚至應用程式崩潰。
儘管多次呼叫 launch() 有限制,但仍有需要定期顯示 GUI 視窗的應用程式的實用解決方案。
範例實作
以下程式碼封裝了上面概述的策略:
<code class="java">public class RendezvousApplication extends Application { // Singleton JavaFX component private static Scene primaryScene; @Override public void start(Stage primaryStage) throws Exception { // Initialize primaryScene on first launch if (primaryScene == null) { primaryScene = createScene(); } // Attach scene to Stage primaryStage.setScene(primaryScene); primaryStage.show(); } private Scene createScene() { return new Scene(new Label("Rendezvous Window"), 400, 300); } // Called when GUI is closed @Override public void stop() throws Exception { super.stop(); Platform.setImplicitExit(false); } // Launch GUI from another thread public static void displayWindow() { Platform.runLater(() -> { if (primaryScene == null) { launch(RendezvousApplication.class); } else { Stage newStage = new Stage(); newStage.setScene(primaryScene); newStage.show(); } }); } }</code>
此程式碼示範瞭如何保持FX 運行時處於活動狀態,允許您顯示來自不同執行緒的窗口,而無需多次呼叫launch()。
雖然 JavaFX 的 launch() 方法有其局限性,但了解如何解決這些限制對於建立健全、可擴展的 JavaFX 應用程式至關重要。
以上是您可以解決 JavaFX launch() 呼叫限制嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!