2016-02-13 60 views
0

所以,当我尝试运行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(); 
} 

回答

1

要么运行

Platform.runLater(new Runnable() { 
    @Override 
    public void run() { 
     loginController.onSessionLoginAction(); 
    } 
}); 

您的代码或使用Timeline代替Timer的。

+0

Omg谢谢,我没有尝试类似的代码给你,但它没有奏效。但是,这工作:) – 8803286

+0

@ 8803286问题是,所有与GUI有关的东西都应该在GUI线程上运行。当你启动一个计时器时,它将运行在另一个线程上。这个方法允许你从其他地方的GUI线程上运行东西。 'Timeline'是一种JavaFX定时器,也在GUI线程上运行。 – Veluria

相关问题