标签: java-11

带有moditect和Java 11的JavaFX Maven

根据是否有一种方法在使用maven-jlink-plugin时添加maven依赖项? 有没有人在Java 11中使用带有JavaFX的ModiTect Maven插件.我尝试使用maven-jlink-plugin:

 <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jlink-plugin</artifactId>
    <version>3.0.0-alpha-1</version>
    <extensions>true</extensions>
    <dependencies>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>6.2</version> <!-- Use newer version of ASM -->
        </dependency>
    </dependencies>
</plugin>            
Run Code Online (Sandbox Code Playgroud)

但得到了:

--- maven-jlink-plugin:3.0.0-alpha-1:jlink (default-jlink) @ test33 ---
Toolchain in maven-jlink-plugin: jlink [ C:\Program Files\Java\jdk-11\bin\jlink.exe ]
The following dependencies will be linked into the runtime image:
 -> module: javafx.controlsEmpty ( C:\Users\md\.m2\repository\org\openjfx\javafx-controls\11-ea+25\javafx-controls-11-ea+25.jar )
 -> module: javafx.controls ( C:\Users\md\.m2\repository\org\openjfx\javafx-controls\11-ea+25\javafx-controls-11-ea+25-win.jar )
 -> module: javafx.graphicsEmpty ( C:\Users\md\.m2\repository\org\openjfx\javafx-graphics\11-ea+25\javafx-graphics-11-ea+25.jar )
 -> module: javafx.graphics ( C:\Users\md\.m2\repository\org\openjfx\javafx-graphics\11-ea+25\javafx-graphics-11-ea+25-win.jar )
 -> module: javafx.baseEmpty ( C:\Users\md\.m2\repository\org\openjfx\javafx-base\11-ea+25\javafx-base-11-ea+25.jar …
Run Code Online (Sandbox Code Playgroud)

javafx jlink maven moditect java-11

6
推荐指数
1
解决办法
3072
查看次数

配置OpenJFX 11将其DLL解压缩到另一个用户指定的目录中?

有没有办法配置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)

java dll runtime openjfx java-11

6
推荐指数
1
解决办法
567
查看次数

Maven surefire和JDK 11

我试图让Maven确定在JDK 11下运行,但我不断收到这些错误:

  1. 如果我设置reuseForks为true:
  Error occurred in starting fork, check output in log
  Process Exit Code: 1
  at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:670)
  at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:283)
  at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:246)
Run Code Online (Sandbox Code Playgroud)
  1. 如果我将其设置为false:
Execution default-test of goal org.apache.maven.plugins:maven-surefire-   plugin:3.0.0-M1:test
failed: java.lang.ClassNotFoundException: org.apache.maven.plugin.surefire.StartupReportConfiguration
Run Code Online (Sandbox Code Playgroud)

我发现这个和这个链接描述了同样的问题,但他们没有任何解决方案.

为了复制这个bug,我创建了这个git repo

java testing maven maven-surefire-plugin java-11

6
推荐指数
2
解决办法
3550
查看次数

使用Java11运行Javafx应用程序时出现“ java.lang.RuntimeException:找不到工具包”错误

我们最近从Java 8迁移到了openJdk11。现在,我正在尝试使用两个操作系统上都安装的openJdk在Windows和ubuntu上测试我的应用程序。我可以在ubuntu上运行它。但是在Windows10中没有使用java11.Error_Message执行相同的操作:

在此处输入图片说明

java.lang.RuntimeException: No toolkit found
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

runtimeexception windows-10 java-11 javafx-11

6
推荐指数
1
解决办法
2318
查看次数

带有VSCode的JavaFX-11

我必须在这里遗漏一些明显的东西...我正在尝试VSCode(来自Eclipse),但是我无法获得VSCode来查看JavaFX11库。在import语句中,标记了对JavaFX组件的所有引用:

[Java] The import javafx cannot be resolved
Run Code Online (Sandbox Code Playgroud)

在Eclipse中,这由“用户库”处理,该库在.classpath中生成一个条目

<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JavaFX11">
    <attributes>
        <attribute name="module" value="true"/>
    </attributes>
</classpathentry>
Run Code Online (Sandbox Code Playgroud)

尽管VSCode似乎可以从Eclipse理解.classpath的其余部分,但它不理解这一点。用磁盘上的实际位置替换path属性也不起作用。

为了清楚起见:

  • 这个问题专门与Java 11有关。在早期的Java版本中,JavaFX是JDK的一部分。在Java 11中,它已移至一组外部模块。
  • 我不想使用Maven或Gradle。我需要不使用构建工具直接引用模块。

值得一提的是,如果VSCode也可以直接执行JavaFX应用程序,那就太好了。但是,如果我必须从命令行使用显式的模块路径和类路径启动应用程序,这是可以接受的

javafx visual-studio-code java-11 javafx-11

6
推荐指数
1
解决办法
8830
查看次数

了解主类如何影响JPMS

我有一个非常基本的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 javafx java-platform-module-system java-11 javafx-11

6
推荐指数
1
解决办法
103
查看次数

带有jlink的SSLHandshakeException创建的运行时

我有一个dropwizard应用程序,可以在标准JRE上正常运行。

我尝试使用jlink创建一个运行时,该运行时小得多:

/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/bin/jlink --no-header-files --no-man-pages --compress=2 --strip-debug --add-modules java.base,java.compiler,java.desktop,java.instrument,java.logging,java.management,java.naming,java.scripting,java.security.jgss,java.sql,java.xml,jdk.attach,jdk.jdi,jdk.management,jdk.unsupported --output jre
Run Code Online (Sandbox Code Playgroud)

如果我使用创建的jlink运行时来运行它,则会引发连接到redis的错误(它的前面有通道)。

ERROR [2019-03-31 09:12:20,080] com.company.project.core.WorkerThread: Failed to process message.
! javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
! at java.base/sun.security.ssl.Alert.createSSLException(Unknown Source)
! at java.base/sun.security.ssl.Alert.createSSLException(Unknown Source)
! at java.base/sun.security.ssl.TransportContext.fatal(Unknown Source)
! at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Unknown Source)
! at java.base/sun.security.ssl.TransportContext.dispatch(Unknown Source)
! at java.base/sun.security.ssl.SSLTransport.decode(Unknown Source)
! at java.base/sun.security.ssl.SSLSocketImpl.decode(Unknown Source)
! at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)
! at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
! at java.base/sun.security.ssl.SSLSocketImpl.ensureNegotiated(Unknown Source)
! at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(Unknown Source)
! at redis.clients.jedis.util.RedisOutputStream.flushBuffer(RedisOutputStream.java:52)
! at redis.clients.jedis.util.RedisOutputStream.flush(RedisOutputStream.java:133)
! at redis.clients.jedis.Connection.flush(Connection.java:300)
! …
Run Code Online (Sandbox Code Playgroud)

java jlink java-11

6
推荐指数
3
解决办法
258
查看次数

JDK 11编译失败,JDK 8编译正常

该代码可以使用JDK 8(1.8.0_212)正常编译,但是无法同时使用Oracle jdk和open jdk的JDK 11(11.0.3)进行编译(aws corretto)

尝试使用javac和Maven(Maven 3.6.1版和Maven-compiler-plugin插件3.8.0版)进行编译,它针对JDK 8进行编译,而针对JDK 11则失败。

import java.net.URL;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.Function;
import java.util.stream.Stream;

public class AppDemo {
    public static void main(String[] args) {
        // NO error here
        giveMeStream("http://foo.com").map(wrap(url -> new URL(url)));

        List<String> list = new ArrayList<String>();
        list.add("http://foo.com/, http://bar.com/");
        // error: unreported exception MalformedURLException;
        // must be caught or declared to be thrown
        list.stream().flatMap(
            urls -> Arrays.<String>stream(urls.split(",")).map(wrap(url -> new URL(url)))
        );

        // error: unreported exception MalformedURLException;
        // must be caught or declared …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-11

6
推荐指数
1
解决办法
159
查看次数

如何确定我有JDK11的“免费”版本还是“非免费”版本?

众所周知,Oracle更改了Java 11中的Java许可证,要求JDK商业使用需要付费许可证。使用OpenJDK仍然是免费的。

我的PC上有一个JDK 11文件夹,如下所示:

在此处输入图片说明

这些文件夹中的某处是否有办法告诉我我有免费的OpenJDK版本还是需要付费许可证的Oracle JDK版本?

java java-11

6
推荐指数
1
解决办法
161
查看次数

Netty-无法访问类jdk.internal.misc.Unsafe

当我将Java从8升级到11时,我从Netty收到有关的错误"jdk.internal.misc.Unsafe",详细信息如下:

我知道这是一条调试级别消息,并且可以更改日志级别以忽略它。但是我不确定是否会忽略其他问题,例如性能。有谁知道最好的解决方案?

java.lang.IllegalAccessException: class io.netty.util.internal.PlatformDependent0$6 cannot access class jdk.internal.misc.Unsafe (in module java.base) because module java.base does not export jdk.internal.misc to unnamed module @84b8f0f
    at jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:361) ~[?:?]
    at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:591) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:558) ~[?:?]
    at io.netty.util.internal.PlatformDependent0$6.run(PlatformDependent0.java:334) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:325) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:214) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:82) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at io.netty.buffer.UnpooledByteBufAllocator.<clinit>(UnpooledByteBufAllocator.java:37) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at io.netty.buffer.Unpooled.<clinit>(Unpooled.java:73) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at wedo.stream3.framework.base.connector.supplier.DelimiterDecoderSupplier.getDelimiter(DelimiterDecoderSupplier.java:41) ~[classes/:?]
    at wedo.stream3.framework.base.connector.supplier.DelimiterDecoderSupplier.<init>(DelimiterDecoderSupplier.java:26) ~[classes/:?]
    at wedo.stream3.framework.base.connector.supplier.DelimiterDecoderSupplier.<init>(DelimiterDecoderSupplier.java:20) ~[classes/:?]
    at wedo.stream3.framework.base.connector.supplier.CommonChannelHandlerSupplier.<init>(CommonChannelHandlerSupplier.java:37) ~[classes/:?]
    at wedo.stream3.framework.base.connector.supplier.CommonChannelHandlerSupplier.<init>(CommonChannelHandlerSupplier.java:25) ~[classes/:?]
    at wedo.stream3.framework.base.connector.TcpClientConnector.start(TcpClientConnector.java:39) ~[classes/:?]
    at wedo.stream3.framework.bootstrap.FrameworkLauncher.lambda$start$0(FrameworkLauncher.java:61) ~[classes/:?]
    at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) [?:?] …
Run Code Online (Sandbox Code Playgroud)

java netty java-11

6
推荐指数
3
解决办法
994
查看次数