【发布时间】:2015-04-03 23:23:10
【问题描述】:
比方说,我们有以下类:
import javafx.application.Application;
import javafx.stage.Stage;
public class Test extends Application
{
public Test()
{
System.out.println("Constructor");
}
@Override
public void start(Stage primaryStage) throws Exception
{
System.out.println("start");
}
public static void main(String... args)
{
System.out.println("main");
}
}
它派生自Application,但它不使用它的任何方法。通常,您通过在 main 中调用 launch(args) 来启动 JavaFX 应用程序。
当我启动这个程序时,唯一的输出是“main”,所以没有调用构造函数和 start,但程序不会终止,因为有一个 JavaFX 应用程序线程正在运行。但它是从哪里来的呢?
我做了一些调试,发现线程是在main方法运行之前从主线程启动的。堆栈跟踪以NativeMethodAccessorImpl 开头。
更奇怪的是:当我从不同的类启动 main 方法时,JavaFX 应用程序线程没有启动:
public class Test2
{
public static void main(String[] args)
{
Test.main(args);
}
}
那么这是什么黑魔法?
【问题讨论】:
-
支持黑魔法。
-
在第二个类Test2中,您没有在原始类声明中添加扩展应用程序。因此,您的运行时不知道涉及 JavaFX 进程 - 它可能是任何其他类型的 Java 类的 main(.) 方法。