2016-06-29 2 views
1

私はその後、私は別のクラス桂デフォルトのコンストラクタを使用して別のクラスからjavafxアプリケーションを起動するには?

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.FlowPane; 
import javafx.stage.Stage; 

public class Gui extends Application{ 
    public Gui() { 
     Application.launch(); 
    } 
    @Override 
    public void start(Stage primaryStage) throws Exception { 
     primaryStage.setTitle(""); 
     FlowPane flowLayout= new FlowPane(); 
     Scene scene = new Scene(flowLayout,200,200); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
} 

私は、GUIのインスタンスを作成することによって、あまりにもデフォルトコンストラクタでメインクラスからのJavaFXアプリケーションを起動したいを持っているメインクラスに

public class Main{ 
    public static void main(String[] args) { 
     Gui gui = new Gui(); 
    } 
} 

を持っています。 どうすればいいですか?

+0

あなたのアプリケーションクラスはあなたのFXメインクラスですが、別のクラスから呼び出す理由がわかりません。非GUIロジックを処理しようとしているのですか?そうであればFX Main Classから呼び出します。 – XaolingBao

+0

そのコールをコンストラクタに置くことは、コンストラクタコール - > 'launch()'コール - >アプリケーションクラス(=コンストラクタコール)のインスタンスの作成という非常に悪い考えです。私はこれがstackoverflowで失敗するか、複数回起動することについて不平を言うかどうかはわかりませんが、とにかく失敗します... – fabian

答えて

3

launchメソッド呼び出しをコンストラクタに入れないでください。これはブロッキングメソッド呼び出しであり、アプリケーションが終了するまで戻りません。

GUIのデフォルトのコンストラクタはApplication.launchメソッドによって呼び出され、アプリケーションランチャにインスタンスを渡す必要はありません(またできません)。別のクラスのmainメソッドから実際に電話したい場合は、Application.launch(Gui.class, args)を直接使用することができます。

関連する問題