Hallo,
Ich möchte ein JavaFX UI von einem Background Thread aktualisieren. Ich habe mich an folgendem Codebeispiel orientiert:
JavaFX Concurrency Example | Examples Java Code Geeks - 2021
Jedoch ist mein UI mit einer Controller Klasse und einem *.fxml - File aufgesetzt.
Ich möchte also das label über das controller objekt ansprechen. Aber genau hier, stürzt mein Programm ab.
Hier mein angepasster Code:
[CODE lang="java" title="Update UI via controller class" highlight="81"]
public class FxConcurrencyExample3 extends Application
{
private Stage primaryStage;
private MainWindowController controller = new MainWindowController();
public static void main(String[] args)
{
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
try {
FXMLLoader loader = new FXMLLoader(FxConcurrencyExample3.class.getResource("MainWindow.fxml"));
AnchorPane pane = loader.load();
primaryStage.setMinHeight(400);
primaryStage.setMinWidth(500);
// MainWindowController mainWindowController = loader.getController();
// mainWindowController.setMain(this);
Scene scene = new Scene(pane);
primaryStage.setScene(scene);
primaryStage.show();
startTask();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public void startTask()
{
// Create a Runnable
Runnable task = new Runnable()
{
public void run()
{
runTask();
}
};
// Run the task in a background thread
Thread backgroundThread = new Thread(task);
// Terminate the running thread if the application exits
backgroundThread.setDaemon(true);
// Start the thread
backgroundThread.start();
}
public void runTask()
{
try
{
// Get the Status
// Update the Label on the JavaFx Application Thread
Platform.runLater(new Runnable()
{
@Override
public void run()
{
controller.ofActuelContent.setText("test");
System.out.println("run");
}
});
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
[/CODE]
Die Fehlermeldung ist:
Was mache ich falsch?
Wie sollte das Grundgerüst aussehen für mein Vorhaben?
Danke für eine Hilfe....
Ich möchte ein JavaFX UI von einem Background Thread aktualisieren. Ich habe mich an folgendem Codebeispiel orientiert:
JavaFX Concurrency Example | Examples Java Code Geeks - 2021
Jedoch ist mein UI mit einer Controller Klasse und einem *.fxml - File aufgesetzt.
Ich möchte also das label über das controller objekt ansprechen. Aber genau hier, stürzt mein Programm ab.
Hier mein angepasster Code:
[CODE lang="java" title="Update UI via controller class" highlight="81"]
public class FxConcurrencyExample3 extends Application
{
private Stage primaryStage;
private MainWindowController controller = new MainWindowController();
public static void main(String[] args)
{
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
try {
FXMLLoader loader = new FXMLLoader(FxConcurrencyExample3.class.getResource("MainWindow.fxml"));
AnchorPane pane = loader.load();
primaryStage.setMinHeight(400);
primaryStage.setMinWidth(500);
// MainWindowController mainWindowController = loader.getController();
// mainWindowController.setMain(this);
Scene scene = new Scene(pane);
primaryStage.setScene(scene);
primaryStage.show();
startTask();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public void startTask()
{
// Create a Runnable
Runnable task = new Runnable()
{
public void run()
{
runTask();
}
};
// Run the task in a background thread
Thread backgroundThread = new Thread(task);
// Terminate the running thread if the application exits
backgroundThread.setDaemon(true);
// Start the thread
backgroundThread.start();
}
public void runTask()
{
try
{
// Get the Status
// Update the Label on the JavaFx Application Thread
Platform.runLater(new Runnable()
{
@Override
public void run()
{
controller.ofActuelContent.setText("test");
System.out.println("run");
}
});
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
[/CODE]
Die Fehlermeldung ist:
Java:
Feb 09, 2021 11:43:06 AM javafx.fxml.FXMLLoader$ValueElement processValue
WARNING: Loading FXML document with JavaFX API of version 15.0.1 by JavaFX runtime of version 8.0.202-ea
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at tutorial.FxConcurrencyExample3$2.run(FxConcurrencyExample3.java:100)
at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$3(WinApplication.java:177)
at java.lang.Thread.run(Thread.java:748)
Was mache ich falsch?
Wie sollte das Grundgerüst aussehen für mein Vorhaben?
Danke für eine Hilfe....