2017-01-23 2 views
1

Ich habe ein Problem mit dem gemeinsamen Zugriff, wenn ich versuche, eine Javafx-Anwendung zu starten.Eine Javafx-Anwendung kann nicht in einem separaten Thread von einem Hauptspiel-Thread gestartet werden

Ich habe ein textbasiertes Spiel geschrieben, aber ich wollte auch meine eigene Konsole erstellen, um es zu spielen, und deshalb habe ich eine Console Javafx-Anwendung gemacht, die gut alleine funktioniert. Ich habe die Konsole als Jar-Datei exportiert und sie dem Build-Pfad für mein Spiel hinzugefügt.

Kurz nach dem Spiel beginnt, wird dieser Ausschnitt ausgeführt wird, einen neuen Thread starten:

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

Der neue Thread, der gestartet wird, sieht wie folgt aus: ist

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(); 
    } 

Dieser Thread-Klasse soll Starten Sie die Konsolenanwendung, während das Hauptspiel fortgesetzt wird. Sobald die Anwendung gestartet wird, wird die Konsole jedoch wie beabsichtigt angezeigt, der Rest des Spiels bleibt jedoch stehen. Der Hauptspiel-Thread stoppt einfach nach dem Start des neuen Threads und fährt nur fort, wenn ich die Konsolen-Anwendung manuell schließe.

Ich wollte die Console-Anwendung auf einem eigenen Thread arbeiten lassen, wo der Spieler Text eingeben konnte und der Hauptspiel-Thread es lesen und etwas anderes ausdrucken würde. Was verstehe ich nicht über Java-Parallelität?

Antwort

2

Vom documentation:

Die Startmethode nicht zurück, bis die Anwendung beendet wurde, entweder über einen Aufruf Platform.exit oder alle Anwendungs ​​Fenster geschlossen wurden.

So blockiert Ihr Code bei new ConsoleThread().

Beachten Sie auch, dass launch() nur einmal aufgerufen werden kann. Je nachdem, was genau Sie hier tun, sollten Sie die gesamte Strategie hier überdenken.

In Verbindung stehende Frage: Call JavaFX in Java program and wait for wait to exit before running more code

+0

Danke für Ihre Antwort! Ja, ich habe die Dokumente nicht genug gelesen, es scheint, als müsste ich meine Strategie überdenken, wenn ich dieses Programm schreibe. Danke trotzdem! : D –

Verwandte Themen