Reu*_*aer 12 inheritance javafx javafx-2
我有问题从没有扩展的类的Main方法启动JavaFX应用程序 javafx.application.Application
在我的应用程序中MainApp.java,应该启动其中的override方法start(),该方法MainUIController.java扩展Applciation
当我从MainUIController.java一切工作开始Main方法工作正常.
MainApp.java
public class MainApp {
public static void main(String[] args) {
PersonJDBCTemplate jdbc = connect();
MainUIController mUIc = new MainUIController(jdbc);
mUIc.start(new Stage());
}
public static PersonJDBCTemplate connect() {
ApplicationContext context = new ClassPathXmlApplicationContext(
"Beans.xml");
PersonJDBCTemplate personJDBCTemplate = (PersonJDBCTemplate) context
.getBean("personJDBCTemplate");
return personJDBCTemplate;
}
}
Run Code Online (Sandbox Code Playgroud)
MainUIController.java
public class MainUIController extends Application {
private Stage stage;
// private User loggedUser;
private final double MINIMUM_WINDOW_WIDTH = 800.0;
private final double MINIMUM_WINDOW_HEIGHT = 570.0;
private String version = "0.6";
private PersonJDBCTemplate jdbc;
public MainUIController(PersonJDBCTemplate jdbc) {
this.jdbc = jdbc;
}
@Override
public void start(Stage primaryStage) {
try {
stage = primaryStage;
stage.setTitle("Sharp");
stage.setMinWidth(MINIMUM_WINDOW_WIDTH);
stage.setMinHeight(MINIMUM_WINDOW_HEIGHT);
stage.setResizable(false);
gotoLogin();
primaryStage.show();
} catch (Exception ex) {
Logger.getLogger(MainUIController.class.getName()).log(
Level.SEVERE, null, ex);
}
}
public void gotoLogin() {
try {
LoginController login = (LoginController) replaceSceneContent("/fxml/Login.fxml");
login.setApp(this);
} catch (Exception ex) {
Logger.getLogger(MainUIController.class.getName()).log(
Level.SEVERE, null, ex);
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行MainApp后,我收到以下错误:
Exception in thread "main" java.lang.ExceptionInInitializerError
at javafx.stage.Window.<init>(Window.java:1110)
at javafx.stage.Stage.<init>(Stage.java:236)
at javafx.stage.Stage.<init>(Stage.java:224)
at ch.kit.sharp.main.MainApp.main(MainApp.java:15)
Caused by: java.lang.IllegalStateException: This operation is permitted on the event thread only; currentThread = main
at com.sun.glass.ui.Application.checkEventThread(Application.java:445)
at com.sun.glass.ui.Screen.setEventHandler(Screen.java:245)
at com.sun.javafx.tk.quantum.QuantumToolkit.setScreenConfigurationListener(QuantumToolkit.java:600)
at javafx.stage.Screen.<clinit>(Screen.java:80)
... 4 more
Run Code Online (Sandbox Code Playgroud)
Ita*_*iha 22
除了Nejinx所说的,你不能直接调用你的start(),总是调用launch(),因为它设置了JavaFX环境,包括creation of stage并将calls start()阶段作为参数传递给它.
文档有一个特别说明这一点的说明
注意:此方法在JavaFX应用程序线程上调用
该launch()可以从所谓的任何一类,考虑到如果直接没有扩展类javafx.application.Application,则必须通过扩展它的类作为参数传递给启动方法.
例如,假设您有一个JavaFXMain扩展的类Application
class JavaFXMain extends Application {...}
Run Code Online (Sandbox Code Playgroud)
您可以使用任何其他类来启动JavaFX应用程序.
class Main {
...
public void someMethod() {
...
JavaFXMain.launch(JavaFXMain.class); // Launch the JavaFX application
...
}
}
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你可以在主要方法中尝试这样的事情MainApp:
// You may remove args if you don't intend to pass any arguments
MainUIController.launch(MainUIController.class, args)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18955 次 |
| 最近记录: |