访问控制器,然后从另一个类执行功能
问题描述:
所以,当我尝试运行java代码我得到的错误访问控制器,然后从另一个类执行功能
异常在线程“AWT-EventQueue的 - 0” java.lang.IllegalStateException:不上FX应用程序线程; currentThread = AWT-EventQueue的-0
LoginController.java
public class LoginController {
public void onSessionLoginAction() {
//I have some functions here so i just minimize a bit of the code
loginUser();
}
public void loginUser() {
Init.getInstance().hideWindow("login"); // Error <---
Init.getInstance().setEnabled(true); // Error <---
Init.getInstance().run(); // Success <--
}
}
Init.java
public abstract class Init extends Application {
private static Init instance;
private boolean isEnabled = false;
private Timer timer;
public void initialize(Stage stage) {
instance = this;
// Login with session if you can :) Success to run this code here
timer = new Timer(50, new ActionListener() {
public void actionPerformed(ActionEvent e) {
FXMLLoader loader = loginWindow.getFxmlLoader();
LoginController loginController = loader.<LoginController>getController();
loginController.onSessionLoginAction(); //This runs the session on LoginController.java
timer.stop();
}
});
timer.start();
}
public void setEnabled(boolean flag) {
isEnabled = flag;
}
public static Init getInstance() {
return instance;
}
public abstract void run();
}
答
要么运行
Platform.runLater(new Runnable() {
@Override
public void run() {
loginController.onSessionLoginAction();
}
});
您的代码或使用Timeline
代替Timer
的。
Omg谢谢,我没有尝试类似的代码给你,但它没有奏效。但是,这工作:) – 8803286
@ 8803286问题是,所有与GUI有关的东西都应该在GUI线程上运行。当你启动一个计时器时,它将运行在另一个线程上。这个方法允许你从其他地方的GUI线程上运行东西。 'Timeline'是一种JavaFX定时器,也在GUI线程上运行。 – Veluria