错误:找不到或加载主类application.Main 原因:java.lang.NoClassDefFoundError:javafx/application/Application JDK 11

8

我遇到了一个非常基础的问题。我使用JavaFX创建了一个简单的“Hello World”程序,它在JDK 1.8上运行良好。但是当我切换到JDK-11时,它抛出以下异常:

Error: Could not find or load main class application.Main
Caused by: java.lang.NoClassDefFoundError: javafx/application/Application

以下是我在Eclipse中编写的代码。

package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;


public class Main extends Application {

    private Scene theScene;
    @Override
    public void start(Stage primaryStage) {
try {

            FXMLLoader loader = new FXMLLoader(getClass().getResource("MyScene.fxml"));
            Parent mainPane = loader.load();


            theScene = new Scene(mainPane);
            primaryStage.setScene(theScene);
            primaryStage.show();

        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void setTheScene(Scene theScene) {
        this.theScene = theScene;
    }

    public static void main(String[] args) {
        launch(args);
    }
}

你是在哪里以什么方式运行它(在Eclipse/Intellij中,作为JAR等)? - Gnas
我正在使用 "java -jar myapp.jar" 运行 jar 文件。 - Shahrukh S.
3
Java 11并不包含JavaFX 11,但这并不意味着它不支持JavaFX 11。您可以运行JavaFX 11应用程序,并且有一个入门指南在这里 - José Pereda
@Gnas 我使用 Eclipse 构建它:将其导出为可运行的 Jar 文件。 - Shahrukh S.
谢谢@Gnas。我明确包含了所有的Java依赖项,我认为现在应该可以工作了。它显示以下错误: 错误:缺少JavaFX运行时组件,并且需要运行此应用程序我认为我可能错过了一个非常小的东西,也许我必须在环境变量中添加一些内容。实际上,我是Java的新手,所以问这个愚蠢的问题。你能帮帮我吗? - Shahrukh S.
显示剩余7条评论
4个回答

10

在将Debian从Stretch升级到Buster后,我遇到了同样的问题,但现在一切都好了:

java --version

openjdk 11.0.4 2019-07-16

要在终端中运行一个JavaFX应用程序,请按照以下步骤操作:

  1. 安装openjfx(如果尚未安装):
    sudo apt install openjfx

  2. 列出javafx库的位置:
    dpkg-query -L openjfx
    输出应该像这样:

. /usr /usr/share /usr/share/doc /usr/share/doc/openjfx /usr/share/doc/openjfx/TODO.Debian /usr/share/doc/openjfx/changelog.Debian.gz /usr/share/doc/openjfx/copyright /usr/share/openjfx /usr/share/openjfx/lib /usr/share/openjfx/lib/javafx.properties /usr/share/openjfx/lib/javafx.base.jar /usr/share/openjfx/lib/javafx.controls.jar /usr/share/openjfx/lib/javafx.fxml.jar /usr/share/openjfx/lib/javafx.graphics.jar /usr/share/openjfx/lib/javafx.media.jar /usr/share/openjfx/lib/javafx.swing.jar /usr/share/openjfx/lib/javafx.web.jar

  1. 通过包括javafx路径和模块来运行jar应用程序:
    java --module-path $PATH_TO_OPENJFX-LIB --add-modules module_1,module_2,module_3,...,module_n -jar $PATH_TO_JAR_FILE

示例:

java --module-path /usr/share/openjfx/lib --add-modules=javafx.controls,javafx.fxml,javafx.base,javafx.media,javafx.web,javafx.swing -jar '/home/lotfi/Documents/MyAppfolder/my_application.jar'

2

JDK 11不支持JavaFX。Oracle已将其删除。但是您可以使用Maven将JavaFX添加到您的项目中。

最初的回答:JDK 11不再支持JavaFX,但您可以通过Maven将其添加到您的项目中。


是的,OpenFX建议与您的应用程序一起构建(在应用程序jar中),自Java 9以来。 - Boyd Stephen Smith Jr.

1

当我执行一个Java应用程序时,出现了类似的错误,我无法找到已安装的某些包。我定位了应用程序读取的路径,并在那里添加了一个符号链接,指向我已安装的JavaFX库。

例如:

user@server:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib$ sudo ln -s /usr/share/openjfx/lib/javafx.properties

0
在Eclipse中:运行配置->参数->VM参数:
--module-path ${project_classpath:REPLACE_ME_WITH_YOUR_PROJECT_NAME} 

--add-modules javafx.controls,javafx.fxml

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