Ich versuche TextArea mit Platform.runLater
von einer anderen Klasse zu aktualisieren, die Runnable
implementiert. Ich habe alle meine GUI in einer Klasse (dort ist, wo meine TextArea ist), ich erstelle einen new server
Thread und läuft es, wenn ich die GUI erstellen. Ich versuche Platform.runLater
aus dem Server
Thread zu verwenden, um meine TextArea
zu aktualisieren, aber Platform.runLater
kann meine TextArea nicht erreichen.JavaFX Update TextArea aus einem anderen Thread mit Platform.runLater
public class SimulationWindow {
public SimulationWindow instance() {
return this;
}
public static void DisplaySimulationWindow() throws FileNotFoundException {
Stage SimuStage = new Stage();
SimuStage.initModality(Modality.APPLICATION_MODAL);
SimuStage.setTitle("Simulation Window");
Server myServer = new Server(instance());
Thread serverThread = new Thread(myServer);
serverThread.start();
TextArea serverTextArea;
.
.
.
}
public class Server implements Runnable {
@Override
public void run() {
while(true){
whileConnected();
.
.
}
private void whileConnected() throws IOException {
sendMessage(message);
do {
try {
message = (String) input.readObject();
showMessage(message);
.
.
.
}
private void showMessage(String x) {
Platform.runLater(() -> serverTextArea.appendText(x));
}
Ich habe versucht, die Instanz von meinem SimulationWindow an den Konstruktor Server vorbei, wie sie hier tun: Modifying JavaFX gui from different thread in different class
Aber Java lassen gewohnt meine SimulationWindow Instanz als Parameter für den Server construtor geben. Andere Lösungen haben die Server- und SimulationWindow-Klasse als eine, aber ich möchte sie getrennt halten. Irgendwelche Tipps werden geschätzt!
Fügen Sie in Server einen Konstruktor hinzu, der textArea als Parameter annimmt – kleopatra
* "Aber Java wird meine SimulationWindow-Instanz nicht als Parameter für den Server-Konstruktor übergeben." * Was für eine "SimulationWindow" -Instanz: Es gibt keine in Ihrem Code. Muss 'displaySimulationWindow() 'wirklich' statisch 'sein? –
hi @James_D Ich habe der Frage die Instanzmethode hinzugefügt. Danke, dass du das gezeigt hast. Ich entfernte statische und jetzt kann ich die Instanz an den Server-Konstruktor senden, aber immer noch kann ich nicht auf die ServerTextArea aus dem Server zugreifen. – CCBoy