无法在其他类中使用JavaFX程序的静态方法
我创建了一个方法,在调用时显示带有适当信息的对话框。我创建了另一个测试类来调用和测试我前面提到的方法。当我使用这个测试类调用这个方法时,它显示了一些我无法解决的错误。先谢谢你无法在其他类中使用JavaFX程序的静态方法,java,javafx,Java,Javafx,我创建了一个方法,在调用时显示带有适当信息的对话框。我创建了另一个测试类来调用和测试我前面提到的方法。当我使用这个测试类调用这个方法时,它显示了一些我无法解决的错误。先谢谢你 package my_classes; import javafx.stage.*; import javafx.geometry.Pos; import javafx.scene.*; import javafx.scene.control.*; import javaf
package my_classes;
import javafx.stage.*;
import javafx.geometry.Pos;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
public class MessageBox
{
public static void show(String label, String button, String title, int xaxis, int yaxis)
{
Stage window=new Stage();
Scene sc;
Button btn=new Button(button);
btn.setOnAction(e -> window.close());
Label lbl=new Label(label);
window.setTitle(title);
VBox vb=new VBox(50);
vb.getChildren().addAll(lbl,btn);
vb.setAlignment(Pos.CENTER);
sc=new Scene(vb,xaxis,yaxis);
window.setMaxHeight(yaxis+100);
window.setMaxWidth(xaxis+100);
window.setMinHeight(yaxis-100);
window.setMinWidth(xaxis-100);
window.initModality(Modality.APPLICATION_MODAL);
window.setScene(sc);
window.showAndWait();
}
}
您需要使用正常的JavaFX应用程序启动过程。这意味着从类继承并使用
launch()
方法来正确初始化JavaFX运行时
例如:
public class MyApplication extends Application {
/**
* Initialize the application
*
* @param args The application arguments
*/
public static void main(final String[] args) {
launch(args);
}
@Override
public void start(final Stage primaryStage) {
// Code here
}
}
请慢慢阅读JavaFX文档:错误状态为:“仅允许在事件线程上执行此操作”;您需要从JavaFX事件线程调用此操作。如果您从start()方法调用它(如果您将应用程序子类化,则此方法可用),则会自动执行。您可以使用
Platform.runLater(java.lang.Runnable)
执行此操作。请使用java命名约定。。别忘了学习javafx应用程序basicskleopatra的教程——我通常重写start方法,在main方法中使用launch方法,然后继续编程。但我这样做是因为我在一本书中看到了这种结构,我想尝试一下。注意:如果需要(出于某种原因),也可以使用Platform\startup(Runnable)
。我通常重写start方法,在main方法中使用launch方法,然后继续编程。但我这样做是因为我在一本书中看到了这种结构,我想尝试一下。我可以问一下@Neo,那是哪本书?在我看来,他们似乎错过了大量实际初始化JavaFX运行时的工作。
public class MyApplication extends Application {
/**
* Initialize the application
*
* @param args The application arguments
*/
public static void main(final String[] args) {
launch(args);
}
@Override
public void start(final Stage primaryStage) {
// Code here
}
}