缺失JavaFX应用程序类

5

我有如下的Java代码:

package mypackage;

import javafx.application.Application;
import javafx.stage.Stage;

public class MyApp extends Application{
    public static void main(String args[]){
        launch(args);
    }
    public void start(Stage primaryStage){
        primaryStage.show();
    }
}

我已经将它编译在 ~/myjava/src/mypackage/MyApp.class 中。 然后,当我运行时从

~$ java -cp myjava/src mypackage/MyApp

为什么会出现这样的错误:
Missing JavaFX application class mypackage/MyApp

我正在使用JDK 8。


使用cp作为myjava/src似乎有些可疑。那个目录是.class文件所在的目录吗?(我会期望是myjava/build或类似的目录) - Jorn Vernee
2个回答

13

这是因为您使用目录路径而不是完全限定类名来调用应用程序。完全限定类名由包名和类名组成。在您的情况下,这是 mypackage.MyApp

假设编译后的类与源代码 .java 文件位于同一文件夹中,请这样调用:

java -cp myjava/src mypackage.MyApp

谢谢@hotzst,它很好用。我认为'/'和'.'是一样的,但实际上不同 :) - mnrendra
或者,就像我的情况一样,我已经为一个jar文件指定了类路径,而不是我需要的“-cp“.;myjar.jar”。 - Josiah Yoder

1
安装Java 15和JavaFX 13以及其他一些更改后,我也遇到了“缺少JavaFX应用程序类mypackage/MyApp”的问题,在我的情况下,包名称和应用程序是正确的。我正在使用一些JDK15预览函数,并且我需要JVM选项--enable-preview。绝望之下,我开始改变一些东西,因为这曾经有效。当我删除--enable-preview选项时,我收到了与我使用预览函数但未指定它相关的错误消息。这告诉我加载器实际上正在找到我的应用程序。在这种情况下,“缺少JavaFX应用程序类mypackage/MyApp”错误消息是不正确的。问题在于我需要包括一些MyApp依赖的用户实用程序类。一旦我在类路径中包含了这些依赖类,一切都好了。

感谢您回答问题。虽然 --enable-preview 标志可以帮助解决一些问题,例如您所描述的问题(“我正在使用预览功能”),但不幸的是,忘记该标志将不会导致错误,而是会导致以下错误:java.lang.UnsupportedClassVersionError: Preview features are not enabled for ... (class file version ...). Try running with '--enable-preview'(请参见 https://nipafx.dev/enable-preview-language-features/#same-version-for-feature-compiler-and-jvm) - cooltea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接