jar 文件无效或损坏,运行 javafx 应用程序

Kan*_*hka -1 java javafx ubuntu-22.04

我的申请代码

public class Main extends Application {
    
    private static Scene scene;
    
    @Override
    public void start(Stage stage) throws IOException {
        
        FXMLLoader fxmlloader = new FXMLLoader(LoginControler.class.getResource("loging.fxml"));
        scene = new Scene(fxmlloader.load());
        stage.setScene(scene);
        stage.setResizable(false);
        stage.show();
        
    }
    
    public static void main(String[] args) {
        launch();
    }
    
}
Run Code Online (Sandbox Code Playgroud)

我试图使用终端在 javafx 应用程序之上运行,但出现此错误。请告诉我我在脚本中是否犯了错误。我已经使用maven-shade-plugin来构建具有依赖项的 jar

root@abc-abc2051A:~# java -jar --module-path /opt/javafx-sdk-11/lib --add-modules javafx.controls myjar-1.0.0-shaded.jar
Error: Invalid or corrupt jarfile /opt/javafx-sdk-11/lib
Run Code Online (Sandbox Code Playgroud)

应用运行环境

  • 操作系统 - Ubuntu 22.04.2 LTS
  • 架构64位
  • Java - OpenJDK 1.8.0_362

Jam*_*s_D 5

的用法java是:

% java --help
Usage: java [options] <mainclass> [args...]
           (to execute a class)
   or  java [options] -jar <jarfile> [args...]
           (to execute a jar file)
   or  java [options] -m <module>[/<mainclass>] [args...]
       java [options] --module <module>[/<mainclass>] [args...]
           (to execute the main class in a module)
   or  java [options] <sourcefile> [args]
           (to execute a single source-file program)
Run Code Online (Sandbox Code Playgroud)

即 jar 文件应立即跟随该-jar选项(其中应位于任何其他选项之后)。所以你需要

java --module-path /opt/javafx-sdk-11/lib --add-modules javafx.controls -jar myjar-1.0.0-shaded.jar
Run Code Online (Sandbox Code Playgroud)

  • @Kanishka你需要一个更新的版本。模块是在版本 9 中引入的(这就是您收到错误的原因)。当前版本是版本20。 (4认同)
  • 如果 `--module-path` 不是一个可识别的选项,那么您拥有的是旧(过时)版本的 `java`。`java --version` 给出了什么? (2认同)
  • @Kanishka 当然,Java 8 不会告诉你任何有关模块的信息。Java 8 是在模块系统之前创建的,因此它无法了解有关模块的任何信息。JavaFX 11+ 的设计仅适用于模块。无论如何,有关 JavaFX 入门的说明位于 [openjfx.io](https://openjfx.io/openjfx-docs/),从系统中删除所有旧内容(例如 Java 8 和 JavaFX 11),然后重新开始使用两者的最新版本(20+)从头开始,完全按照入门说明进行操作。任何其他的事情,你都会冒着花费大量时间而没有回报的风险。 (2认同)