我試了下面的代碼,並被迫啓動我的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