我无法让IntellJ识别JavaFX包.使用OpenJDK 11的新JavaFX项目,在尝试构建项目时,IntelliJ无法识别JavaFX包.
我是openjfx:javafx-base-11从Maven回购中导入的.
我已经查看了其他问题,解决方案似乎包括检查字节码是否处于正确的级别(我的是),以及项目语言是否正确(我的是).
有人有主意吗?
编辑:
错误:
我已按照本指南将 JavaFX 设置到 Linux 机器上。首先我已经安装了 Java 11
asus@asus-pc:/usr/share/openjfx/lib$ java -version
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu219.04.1)
OpenJDK 64-Bit Server VM (build 11.0.3+7-Ubuntu-1ubuntu219.04.1, mixed
mode, sharing)
asus@asus-pc:/usr/share/openjfx/lib$
Run Code Online (Sandbox Code Playgroud)
然后我从命令安装了 OpenJFX sudo apt-get install openjfx
asus@asus-pc:/usr/share/openjfx/lib$ ls
javafx.base.jar javafx.graphics.jar javafx.swing.jar
javafx.controls.jar javafx.media.jar javafx.web.jar
javafx.fxml.jar javafx.properties src.zip
asus@asus-pc:/usr/share/openjfx/lib$
Run Code Online (Sandbox Code Playgroud)
然后在 Eclipse 中创建了一个库。
然后我将它包含到我的 java 项目中。我尝试运行此代码:
package se.danielmartensson.start;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application{
/*
* Start the start(Stage front)
*/
public …Run Code Online (Sandbox Code Playgroud) 我有一个经典问题:将 JavaFX 11 与 OpenJDK 11 与 Eclipse IDE 一起使用。
Error: JavaFX runtime components are missing, and are required to run this application
Run Code Online (Sandbox Code Playgroud)
我有 OpenJDK 11.0.2
dell@dell-pc:~$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
dell@dell-pc:~$
Run Code Online (Sandbox Code Playgroud)
我也有JavaFX 11 SDK。顺便一提!如果您想知道,我正在使用 Lubuntu Linux 18.10。

然后我.jar将JavaFX 11 SDKEclipse IDE 中的文件包含到一个库包中。
你知道为什么吗?如果我.jar从 Maven导入所有这些文件而不是下载JavaFX SDK并将其导入到库中,我会遇到同样的错误。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" …Run Code Online (Sandbox Code Playgroud) 我正在使用InteliJ,已经研究了似乎对其他所有人都适用的所有其他解决方案。我收到一个错误:
Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x5782d366) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x5782d366
Run Code Online (Sandbox Code Playgroud)
然后,将以下内容添加到运行配置中的VM选项:
--module-path="C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib" \
--add-modules=javafx.controls \
--add-exports=javafx.graphics/com.sun.javafx.util=ALL-UNNAMED \
--add-exports=javafx.base/com.sun.javafx.reflect=ALL-UNNAMED \
--add-exports=javafx.base/com.sun.javafx.beans=ALL-UNNAMED \
--add-exports=javafx.graphics/com.sun.glass.utils=ALL-UNNAMED \
--add-exports=javafx.graphics/com.sun.javafx.tk=ALL-UNNAMED
Run Code Online (Sandbox Code Playgroud)
那似乎可以部分解决问题?但是,当我尝试运行此代码时,我没有得到完整的堆栈错误痕迹,我得到了以下三行:
"C:\Program Files\Java\jdk-11.0.1\bin\java.exe" \
--module-path=C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib \
--add-modules=javafx.controls,javafx.fxml \
--add-exports=javafx.graphics/com.sun.javafx.util=ALL-UNNAMED \
--add-exports=javafx.base/com.sun.javafx.reflect=ALL-UNNAMED \
--add-exports=javafx.base/com.sun.javafx.beans=ALL-UNNAMED \
--add-exports=javafx.graphics/com.sun.glass.utils=ALL-UNNAMED \
--add-exports=javafx.graphics/com.sun.javafx.tk=ALL-UNNAMED \
--add-modules javafx.base,javafx.graphics \
--add-reads javafx.base=ALL-UNNAMED \
--add-reads javafx.graphics=ALL-UNNAMED \
"-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3\lib\idea_rt.jar=60572:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3\bin" …Run Code Online (Sandbox Code Playgroud) 我有一个非常基本的JavaFX应用程序,如果Application类不是 Main类,它可以完美地工作:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
public class Main {
public static void main(String[] args) {
Application.launch(App.class, args);
}
}
public class App extends Application {
@Override
public void start(Stage primaryStage) {
FXMLLoader loader = new FXMLLoader(); // works
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我将两者合并在一起时(这是大多数教程中推荐的方式,包括OpenJFX的官方文档),模块系统抛出IllegalAccessError(至少在OpenJDK 11.0.2上):
public class MainApp extends Application {
@Override
public void start(Stage primaryStage) {
FXMLLoader loader = new FXMLLoader(); // throws IllegalAccessError
}
public static void main(String[] args) {
launch(MainApp.class, args);
} …Run Code Online (Sandbox Code Playgroud) 之前我的项目曾经是Java 8,但现在我使用Java 11和JavaFX 11,现在JavaFX已经从Java 11开始与Java分离了.我没有下载JavaFX SDK但是在pom.xml中添加了以下依赖项以获取必需的模块和jar文件,它们在早期版本中曾经是Java本身的一部分.
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但是我can not be resolved to a type在@FXML注释和FXMLLoader类上遇到了编译错误.
我是否需要添加一些其他/额外的依赖项来解决此问题?
java ×6
javafx ×6
javafx-11 ×5
java-11 ×2
openjfx ×2
eclipse ×1
java-platform-module-system ×1
scenebuilder ×1
sdk ×1