我试了下面的代码,并被迫启动我的JavaFx应用程序Viewer
而不直接调用方法launch
。为什么JavaFx应用程序必须从它自己的类中启动?
这里是JavaFX类:
package Freelance;
public class Viewer extends Application
{
private WebEngine myWebEngine;
public void start(Stage stage)
{
stage.setTitle("Browser");
WebView myBrowser = new WebView();
myWebEngine = myBrowser.getEngine();
myWebEngine.getLoadWorker().exceptionProperty().addListener(new ChangeListener<Throwable>()
{
@Override
public void changed(ObservableValue<? extends Throwable> observableValue, Throwable oldException,
Throwable exception)
{
System.out.println("WebView encountered an exception loading a page: " + exception);
}
});
myBrowser.setPrefSize(1600, 900);
BorderPane root = new BorderPane();
root.setCenter(myBrowser);
stage.setScene(new Scene(root));
stage.show();
myWebEngine.load("http://www.google.com/");
}
public static void run()
{
launch("");
}
}
现在,当我尝试从一个单独的类像这样展开的:
package Freelance;
public class Test
{
public static void main(String[] args)
{
Viewer.launch();
}
}
我收到以下错误:
Exception in thread "main" java.lang.RuntimeException: Error: class Freelance.Test is not a subclass of javafx.application.Application
at javafx.application.Application.launch(Application.java:254)
at Freelance.Test.main(Test.java:8)
但是,如果我改变Test
类,如下所示:
package Freelance;
public class Test
{
public static void main(String[] args)
{
Viewer.run(); // Changed from using "launch()" to "run()"
}
}
然后它工作并正常启动。
所以我只是好奇,为什么会发生这种情况,或者如果我写的代码格式不正确。
谢谢。
这些文档相当有用,它描述了使用'launch()'方法的正确方法。选中[此处](https://docs.oracle.com/javase/8/javafx/api/javafx/application/Application。html) – AntJavaDev
顺便说一下,您应该将'args'传递给'launch'方法,而不是空字符串或空数组。 JavaFX将使它们在[应用程序参数](http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html#getParameters--)中可用。 – VGR