![](/img/trans.png)
[英]How to separate AnimationTimer from the JavaFX application thread?
[英]Can't launch a Javafx Application on a separate thread from a Main Game Thread
嘗試啟動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並發不了解?
從文檔中 :
直到調用退出Platform.exit或關閉了所有應用程序窗口后,啟動方法才返回。
因此,您的代碼將在new ConsoleThread()
處阻塞。
還要注意, launch()
只能被調用一次,因此,根據您在此處執行的操作,您可能需要在這里重新考慮整個策略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.