簡體   English   中英

無法在與主游戲線程不同的線程上啟動Javafx應用程序

[英]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()只能被調用一次,因此,根據您在此處執行的操作,您可能需要在這里重新考慮整個策略。

相關問題: 在Java程序中調用JavaFX並等待等待退出,然后再運行更多代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM