2017-01-23 8 views
1

Javafxアプリケーションを起動しようとすると同時性に問題があります。メインゲームスレッドとは別のスレッドでJavafxアプリケーションを起動できません

私はテキストベースのゲームを書いていますが、それを再生するために私自身のコンソールを作りたいと思っていました。私はコンソールjavafxアプリケーションを作りました。私はJarファイルとしてコンソールをエクスポートし、私のゲームのビルドパスに追加しました。ゲーム開始直後に

、このスニペットは、新しいスレッドを開始し、実行されます。

public Game(String playerName) { 
    player = new Player(playerName); 
    try { 
     conThread = new ConsoleThread(); 
     conThread.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    parser = new Parser(conThread); 
    createRooms(); 
} 

次のようになります開始された新しいスレッド:このスレッドクラスをすることになっている

public class ConsoleThread extends Thread{ 
    public ConsoleThread() { 
     Application.launch(Console.class); 
    } 

    public void printToConsole(String text) { 
     Console.printGameInfo(text); 
    } 

    public String textFromConsole() { 
     return Console.getTextField(); 
    } 

をメインゲームが続く間にコンソールアプリケーションを起動します。ただし、アプリケーションが起動されるとすぐに、コンソールは意図どおりに表示されますが、残りのゲームはフリーズします。主なゲームスレッドは新しいスレッドの開始後に単に停止し、コンソールアプリケーションを手動で閉じると続行されます。

私はコンソールアプリケーションを独自のスレッドで動作させたいと思っていました。プレーヤはテキストを入力でき、メインのゲームスレッドはそれを読んで何か他のものを印刷しました。 Javaの並行性について私が理解できないものは何ですか? documentationから

答えて

2

:アプリケーションはPlatform.exitへの呼び出しを介して、またはアプリケーションウィンドウのすべてのいずれかがクローズされた、終了したまで

打ち上げ方法は戻りません。

あなたのコードブロックはnew ConsoleThread()です。

また、launch()は1回だけ呼び出すことができるので、ここで行っていることに応じて、ここでは戦略全体を再考することをお勧めします。

関連する質問:Call JavaFX in Java program and wait for wait to exit before running more code

+0

ありがとうございました!はい、私は十分にドキュメントを読んでいない、私はこのプログラムを書くときに私の戦略を再考する必要がありますように思えます。とにかくありがとう! :D –

関連する問題