有没有办法配置OpenJFX 11将其DLL提取到不同的用户指定目录?
在尝试将现有Java 10/Maven项目迁移到Java 11时,我尝试使用OpenJDK 11.为了使代码构建工作,我需要将JavaFX JAR添加到Maven pom.xml配置文件中(因为JavaFX不再是Java 11的内置部分).
但是,在运行时,我发现由于OpenJFX将DLL文件提取到用户目录中然后访问失败而导致的错误(请参阅下面的错误).多年来我有许多项目在使用C:\ Users*目录时出错(来自Microsoft Windows干扰文件锁和目录权限,反病毒扫描等),所以我试图避免这些目录可能.Java项目在Windows 7和RedHat 7上的Java 10下正常工作,这似乎意味着Oracle的JavaFX 10 JAR没有将DLL提取到C:\ Users*目录中.OpenJFX似乎没有麻烦将DLL写入这些目录,但之后无法读取这些相同的文件.
我运行的是带有service-pack 1的Microsoft Windows 7 Professional 64位.我还没有尝试使用OpenJDK 11和OpenJFX在Linux上运行,但我认为OpenJFX也会尝试在该平台上提取其DLL.
OpenJFX导致的运行时Java错误示例:
Loading library prism_d3d from resource failed: java.lang.UnsatisfiedLinkError: C:\Users\MyUserName\.openjfx\cache\11\prism_d3d.dll: Access is denied
java.lang.UnsatisfiedLinkError: C:\Users\MyUserName\.openjfx\cache\11\prism_d3d.dll: Access is denied
Loading library prism_sw from resource failed: java.lang.UnsatisfiedLinkError: C:\Users\MyUserName\.openjfx\cache\11\prism_sw.dll: Access is denied
java.lang.UnsatisfiedLinkError: C:\Users\MyUserName\.openjfx\cache\11\prism_sw.dll: Access is denied
Graphics Device initialization failed for : d3d, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable …Run Code Online (Sandbox Code Playgroud) 我刚刚安装了 SDK 11 并使用了 maven 中的 Javafx。我的pom如下。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.restfbui21feb</groupId>
<artifactId>uipostdownload</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>LATEST</version>
<configuration>
<mainClass>ui.postDisplayAndAction</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.restfb</groupId>
<artifactId>restfb</artifactId>
<version>2.16.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
我正在使用 WebView,它可以帮助我查看 Facebook 数据并下载我需要的任何内容。
请按如下方式查找异常:
java.lang.IllegalAccessError: superclass access check failed: class com.sun.javafx.sg.prism.web.NGWebView (in unnamed module @0x253d5cf1) cannot access class com.sun.javafx.sg.prism.NGGroup …Run Code Online (Sandbox Code Playgroud) 我们从Swing迁移到JavaFX,并且还使用JavaFX交换了自定义Swing TreeTableView控件TreeTableView.
然而,我们在扩展节点时会遇到明显的延迟.
通过VisualVM查看这个问题,我们发现大部分时间花费在Parent.scenesChanged()和CssStyleHelper.createStyleHelper().然而,我们无法从中获得快速扩展的解决方案.
有没有其他人遇到过JavaFX的问题TreeTableView?
节点的数量不应该是原因,在第一级(即,在根之下)有几百个节点,并且每个节点具有大约20个子节点.
附加信息:我们正在运行Ubuntu,openjfx版本(8u60-b27-4).
我刚刚使用 openjdk 11 在 intelliJ 中创建了一个新的 JavaFX 项目,并在他们的网站上下载了最后一个 openjfx 库。
这是我所做的:
我已添加到运行/调试虚拟机选项:--module-path %PATH_TO_FX% --add-modules=javafx.controls,javafx.fxml
虚拟机选项
我添加了一个新变量 env PATH_TO_FX :PATH_TO_FX=%programfiles%\Java\javafx-sdk-11\lib
所以它编译得很好,但在运行时失败:
Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.controls not found
Run Code Online (Sandbox Code Playgroud)
有谁知道我在这里缺少什么?
PS:我已经关注此链接https://openjfx.io/openjfx-docs/#install-javafx
编辑 :
我这里应该有 onpenjfx 库吗?类路径
我试图在IntelliJ IDEA中创建JavaFX项目,但每次都会出错。
完成教程https://openjfx.io/openjfx-docs/#IDE-Intellij之后,我得到了:
Graphics Device initialization failed for : es2, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
at java.base/java.lang.Thread.run(Thread.java:834)
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) …Run Code Online (Sandbox Code Playgroud) 一个CSS新手问题。
我正在两个相邻的TableViews中显示大量数据,并已双向绑定它们ScrollBar的FocusModels和SelectionModels,以使它们保持同步。
我现在正试图使两个TableView看起来像一个,并且想要拥有:
TableView s 周围的默认蓝色边框。 TableViewTableView时,两个 s 周围的默认灰色边框。TableViews相交处无国界。我将如何去做?
像这样的东西会很棒:
到目前为止,我已经可以通过执行以下操作删除“相遇”边界:
tvLeft.getStyleClass().add("my-table-view-left");
tvRight.getStyleClass().add("my-table-view-right");
Run Code Online (Sandbox Code Playgroud)
使用这样的CSS:
.my-table-view-left:focused {
-fx-background-insets: -1.4 0 -1.4 -1.4, -0.3 0 -0.3 -0.3, 1 0 1 1;
}
.my-table-view-right:focused {
-fx-background-insets: -1.4 -1.4 -1.4 0, -0.3 -0.3 -0.3 0, 1 1 1 0;
}
Run Code Online (Sandbox Code Playgroud)
TableView当选中其中一个行时,这也可以正确地将边框设置在单个边框上。
但是,我想不出如何让周围的边框既 TableView ■当任一具有焦点。
这是MVCE。抱歉,因为它的长度,但是我需要包括同步代码才能拥有一个测试用例。
我正在使用在Windows 7的Netbeans …
在 OpenJFX 11.0.2 & 12.0.1 SDK (Windows 10, x64) 中复制,不能在 JavaFX 8 中复制
右键单击表列,然后尝试调整列的大小。不会显示调整大小光标,并且在您再次手动单击列之前无法调整列大小。
任何解决方法的想法?我需要contextMenu用于 TableColumns,因此不可能使标题忽略鼠标右键单击的潜在解决方法。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
public class Foo extends Application {
@Override
public void start(Stage stage) throws Exception {
TableView<Object> testView = new TableView<>();
testView.getColumns().addAll(new TableColumn<Object, Object>("C1"), new TableColumn<Object, Object>("C2"), new TableColumn<Object, Object>("C3"));
stage.setScene(new Scene(testView));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud) 从对我有用的badass-runtime-example-javafx开始,我复制了这个项目并用我自己的代码扩展了它。我用创建了一个图像gradlew runtime。在 Windows 上执行生成的 .bat 文件时,我收到“错误:缺少 JavaFX 运行时组件,需要运行此应用程序”。
在 build.gradle 中,我添加了一个附加模块javafx.fxml:
javafx {
modules = ['javafx.controls', 'javafx.fxml' ]
}
Run Code Online (Sandbox Code Playgroud)
我还运行了该suggestModules任务并将建议的模块添加到
runtime {
modules = ['java.naming', 'java.xml ...']
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何分析 Java 运行时缺少哪些模块。我看到它java.exe仅使用-classpath(包括应用程序 jar)和主类参数执行。
是java --list-modules答案吗?我看到 build\image\lib 中有一个大文件“模块”,它对我来说看起来很重要。
我正在寻找一种发现的分析方法来解决问题。
尝试将应用程序更新到 Java 11,在对模块进行分类之后,我以为我已经摆脱了所有的红色错误,现在我得到了一个我以前从未见过的错误:
环顾四周,我看到有人建议可以使用应用程序结构:
或 module-info.java 文件:
任何人都可以看到我需要做什么才能摆脱这种情况吗?
编辑:将 Main.java 移动到名为“main”的包并尝试运行它后出错:
我有一个 JavaFx 项目,其中Maven install不断给我错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project gui: Compilation failure: Compilation failure:
[ERROR] /C:/Users/digit/eclipse-workspace/gsn-notator/gui/src/main/java/gui/AppController.java:[21,19] package javafx.fxml does not exist
[ERROR] /C:/Users/digit/eclipse-workspace/gsn-notator/gui/src/main/java/gui/AppController.java:[29,17] cannot find symbol
[ERROR] symbol: class FXMLLoader
[ERROR] location: class gui.AppController
[ERROR] /C:/Users/digit/eclipse-workspace/gsn-notator/gui/src/main/java/gui/AppController.java:[29,45] cannot find symbol
[ERROR] symbol: class FXMLLoader
[ERROR] location: class gui.AppController
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我如何说服 Maven/Eclipse/Java/Whatever 找到FXMLLoader?
项目结构有两个模块,gui和logic,与本教程中的项目结构。我的整体项目 pom 是:
<modules>
<module>logic</module>
<module>gui</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>11</source>
<target>11</target> …Run Code Online (Sandbox Code Playgroud)