繁体   English   中英

如何在 Linux 机器上编译使用 JavaFx 的 Java 源代码(使用 javac 11.0.13)?

[英]How to compile a Java source code (using javac 11.0.13) that uses JavaFx on a Linux machine?

该行import javafx.application.Application; 给我以下编译时错误:
error: package javafx.application does not exist

我正在使用 Linux Lite 5.6(Ubuntu 20.04)和java --version给我:

openjdk 11.0.13 2021-10-19 LTS
OpenJDK Runtime Environment Corretto-11.0.13.8.1 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.13.8.1 (build 11.0.13+8-LTS, mixed mode)

我以为 JavaFX 与 Java SDK 一起出现,但自 JDK 11 以来似乎并非如此。
In order to compile and run JavaFX apps, the JavaFX SDK (which no longer comes together with the Java SDK) is required.


为了能够编译和运行 JavaFX 应用程序,需要遵循以下步骤:

步骤 1. 检查您是否已经安装了 Java

您可以通过在终端中运行java --version来检查是否安装了 Java。 output 应该是这样的:

 openjdk 17.0.1 2021-10-19 OpenJDK Runtime Environment (build 17.0.1+12-39) OpenJDK 64-Bit Server VM (build 17.0.1+12-39, mixed mode, sharing)

如果您得到与此类似的 output(请注意,您可以安装不同的版本),然后继续执行步骤 3。
如果您收到一个错误,这可能意味着您没有安装 Java,您需要安装它。 go 下一步

步骤 2. 安装/下载 Java

您可以在此处找到 Java SDK 进行下载。
单击JDK 17
Builds中选择并下载适合您系统的版本。
将其保存在系统的某个位置。 我将使用~/Programs

建议您也检查文件的总和。

为此,请下载您选择的 Java 版本旁边的sha256文件,并将其保存在您保存 Java 存档的位置。

打开终端或使用现有终端并cd到您下载 Java 存档和 .sha256 文件的位置。

目前我正在写这篇文章,Linux/x64 的sha256不包含文件名。

您可以编辑.sha256文件并在第一行,校验和之后添加 2 个空格,后跟您下载的 Java 存档的名称
你可以运行echo " <name/of/java/archive>" | tee --append <name/of/.sha256/file> echo " <name/of/java/archive>" | tee --append <name/of/.sha256/file>
实现这一目标

它应该像这样1c0a73cbb863aad579b967316bf17673b8f98a9bb938602a140ba2e5c38f880a openjdk-17.0.1_linux-x64_bin.tar.gz

然后运行
sha256sum -c <name/of/java/archive>
(在我的例子中,名字是openjdk-17.0.1_linux-x64_bin.tar.gz

或者,如果您不想编辑文件,则可以运行
test $(sha256sum <name/of/java/archive> | awk '{print $1}') = $(cat <name/of/.sha256/file>) && echo OK

第一种方法中的 output 应该是<name/of/java/archive>: OK而第二种方法应该是OK

使用命令tar -xvzf <name/of/java/archive>提取存档

Go 到通过提取文件创建的目录,在我的例子中是jdk-17.0.1
并运行./bin/java --version以检查 java 是否已正确下载并且可以正常工作。

现在您可以在任何地方使用 java 和 javac 命令,或者您可以在步骤 3中使用 go。

方法一:别名

添加

alias javac="<path/to/jdk>/bin/javac" alias java="<path/to/jdk>/bin/java"

~/.bashrc (或等效的,取决于您的发行版/shell)

方法二:将bin文件夹加入PATH环境变量

添加
export PATH=$PATH:<path/to/jdk>/bin
~/.bashrc (或等效的,取决于您的发行版/shell)

步骤 3. 安装/下载 JavaFX

Go在这里,前往下载部分,选择适合您系统的 SDK 并下载。 最终检查 sha256 总和。

使用unzip <archive/name>提取存档

为简单起见,您可以添加别名来编译和运行 JavaFX 应用程序。 我正在使用以下内容:

 alias java='/home/kamui/Programs/jdk-17.0.1/bin/java' alias javac='/home/kamui/Programs/jdk-17.0.1/bin/javac' alias javafx='java --module-path /home/kamui/Programs/javafx-sdk-17.0.1/lib --add-modules javafx.controls,javafx.fxml' alias javafxc='javac --module-path /home/kamui/Programs/javafx-sdk-17.0.1/lib --add-modules javafx.controls,javafx.fxml'

注意不用javafx.fxml不需要添加

步骤 4. 编译并运行

单一源代码文件

对于单个源代码文件,例如 HelloFX.java,您可以运行以下命令:

 # make sure you are in the directory where HelloFX.java is located javafxc HelloFX.java # to compile it javafx HelloFX # to run it

这些步骤的来源,您还可以在其中找到 HelloFX.java 文件是https://openjfx.io/openjfx-docs/#install-javafx

多个源代码文件

对于更复杂的目录结构,比如这个(这正是 IntelliJ 在您创建新的 JavaFX 项目时提供的),您可以执行以下操作:

确保您位于src所在的文件夹中。

编译:
javafxc -d./out -sourcepath src/ src/main/java/com/example/a7/HelloApplication.java

运行:
javafx -classpath./out com.example.a7.HelloApplication笔记:

  1. 我不知道module-info.java是什么或做什么。
  2. 当我使用 CLI 编译 IntelliJ 为 JavaFX 项目生成的代码时,它在运行时失败(更具体地说,在加载 FXML 时),因为它似乎只能在out文件夹中找到它(我使用getClass( ).getResource()getClass().getClassLoader().getResource() )
    为了解决这个问题,您可以在out文件夹中的某处移动/复制 .fxml 文件,并在代码中为 FXMLLoader 设置正确的路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM