【发布时间】:2017-06-30 16:00:55
【问题描述】:
我有创建类图形的类 PlayerScreen,我想从类 MainGUI 运行它,但我不断收到 java.lang.IllegalStateException: This operation is permitted on the event thread only; currentThread = main
import javafx.application.Application;
import javafx.stage.Stage;
public class PlayerScreen extends Application {
@Override
public void start(Stage primaryStage){
primaryStage.setTitle("Player Screen");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
import javafx.application.Application;
import javafx.stage.Stage;
public class MainGUI {
private static Stage stage = new Stage();
public static void main(String[] args) {
PlayerScreen screen = new PlayerScreen();
PlayerScreen.launch(args);
}
public Stage getStage() {
return stage;
}
public void setStage(Stage stage) {
MainGUI.stage = stage;
}
}
我尝试用screen.launch(args); 和Application.launch(args); 代替PlayerScreen.launch(args);,但我一直收到同样的错误。还有另一个包含类的 launch 方法,但我不知道在第二个变量中放入什么 Application.launch(MainGUI.class, args); args 不被接受
【问题讨论】:
-
制作
MainGUI extends Application而不是PlayerScreen。 -
只需省略
PlayerScreen screen = new PlayerScreen(),然后调用Application.launch(PlayerScreen.class, args);(它将为您实例化PlayerScreen)。 (目前还不清楚通过在这里设置两个不同的类来实现什么分离。) -
@James_D 谢谢,那行得通。我需要有两个类,因为 MainGui 还必须显示另外两个阶段。 (你可以把它写成答案,顺便拿分)
-
但在这种情况下,
PlayerScreen应该不是应用程序的子类。Application子类(应该只有一个)应该代表整个应用程序。即使采用了我建议的修复方法,您的配置仍然严重错误。