我正在努力运行 openjfx 并且变得绝望。我以为我可以在linux和java中进行故障排除,但我从来没有被困这么长时间。
与 Linux 一样,有很多指导,但都是相互冲突且复杂的。我在 stackexchange 网络的多个站点上得到的每条错误消息都包含大量低分问题。每个问题都有一些相互矛盾和低分的答案,这些答案都很简短、不完整并且与我的问题模糊相关。然后,一半的问题将被关闭,因为它们“已得到解答”,而实际上尚未得到解答。我尝试使用 openjdk 11 来使用 openjfx 11,但解决一个错误只允许我得到另一个错误。
堆栈交换需要具体问题,所以这是我的问题:下面,我展示了 dpkg-query -L openjfx 的输出。这是应该的吗?
我单独全新安装了 xubuntu 18.04.3 LTS 并遵循这些步骤但没有运气。然后我尝试以下这。它充满了我不明白的东西,但给了我不相关的谷歌结果。
我正在尝试跑步这段代码。在我的运行配置中,我--module-path /usr/lib/jvm/java-8-openjdk-amd64/lib/ --add-modules javafx.controls
的虚拟机参数中有 - 我不记得我从哪里得到它。我目前得到这个:
Unrecognized option: --module-path
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
这是人们倾向于用来排除故障的 dpkg 输出。
$ dpkg-query -L openjfx
/.
/usr
/usr/bin
/usr/lib
/usr/lib/jvm
/usr/lib/jvm/java-8-openjdk-amd64
/usr/lib/jvm/java-8-openjdk-amd64/bin
/usr/lib/jvm/java-8-openjdk-amd64/bin/javafxpackager
/usr/lib/jvm/java-8-openjdk-amd64/bin/javapackager
/usr/lib/jvm/java-8-openjdk-amd64/jre
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext
/usr/lib/jvm/java-8-openjdk-amd64/lib
/usr/lib/jvm/java-8-openjdk-amd64/man
/usr/lib/jvm/java-8-openjdk-amd64/man/ja_JP.UTF-8
/usr/lib/jvm/java-8-openjdk-amd64/man/ja_JP.UTF-8/man1
/usr/lib/jvm/java-8-openjdk-amd64/man/ja_JP.UTF-8/man1/javafxpackager.1.gz
/usr/lib/jvm/java-8-openjdk-amd64/man/ja_JP.UTF-8/man1/javapackager.1.gz
/usr/lib/jvm/java-8-openjdk-amd64/man/man1
/usr/lib/jvm/java-8-openjdk-amd64/man/man1/javafxpackager.1.gz
/usr/lib/jvm/java-8-openjdk-amd64/man/man1/javapackager.1.gz
/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/man
/usr/share/man/man1
/usr/bin/javafxpackager
/usr/bin/javapackager
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/jfxrt.jar
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/javafx.properties
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jfxswt.jar
/usr/lib/jvm/java-8-openjdk-amd64/lib/ant-javafx.jar
/usr/lib/jvm/java-8-openjdk-amd64/lib/javafx-mx.jar
/usr/share/man/man1/javafxpackager.1.gz
/usr/share/man/man1/javapackager.1.gz
上面的不是应该更多吗像这样?我想我应该看到像 javafx.controls 这样的东西列出,无论它是 openjfx 8 还是更新版本。
这是人们在像我这样的问题中倾向于输入的另一个命令
$ java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-8u242-b08-0ubuntu3~18.04-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
答案1
我也希望dpkg-query -L openjfx
能够列出包中包含的文件仅有的。
但我不想回答你的问题,而是帮助解决你的问题:看起来你正在尝试将 Java 9 中引入的模块概念与 Java 8 混合在一起。我建议坚持使用 Java 11,它在 Ubuntu 18.04 中可用。手动下载javafx-sdk。
将此脚本作为在我的系统上运行的示例:
#!/bin/bash
wget --no-clobber -O javafx-sdk.zip https://gluonhq.com/download/javafx-11-0-2-sdk-linux/
unzip -n javafx-sdk.zip
mkdir -p helloworld
cat > helloworld/HelloWorld.java <<EOF
package helloworld;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloWorld extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
EOF
/usr/lib/jvm/java-11-openjdk-amd64/bin/javac --module-path javafx-sdk-*/lib --add-modules javafx.controls helloworld/HelloWorld.java
/usr/lib/jvm/java-11-openjdk-amd64/bin/java --module-path javafx-sdk-*/lib --add-modules javafx.controls helloworld.HelloWorld
不过,我不明白你关于“这么长时间坚持“一切都开放”是一个错误”的评论。