标签: java-11

在使用Java 11进行调试期间,如何避免出现“仅由于引导加载程序类附加了引导加载程序类才支持共享”的警告?

最近,我切换到Java 11并开始调试应用程序,并看到以下消息:

OpenJDK 64位服务器VM警告:引导加载程序类仅支持共享,因为已附加了引导程序类路径

仅找到此提交故障单,但并不能告诉我太多。

我需要担心吗?

java intellij-idea classloader java-11

39
推荐指数
5
解决办法
1万
查看次数

为什么 javac 为最终字段插入 Objects.requireNonNull(this) ?

考虑以下类:

class Temp {
    private final int field = 5;

    int sum() {
        return 1 + this.field;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我编译和反编译这个类:

> javac --version
javac 11.0.5

> javac Temp.java

> javap -v Temp.class
  ...
  int sum();
    descriptor: ()I
    flags: (0x0000)
    Code:
      stack=2, locals=1, args_size=1
         0: iconst_1
         1: aload_0
         2: invokestatic  #3   // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
         5: pop
         6: iconst_5
         7: iadd
         8: ireturn
Run Code Online (Sandbox Code Playgroud)

简单来说,javac编译sum()成这样:

int sum() {
    final int n = 1;
    Objects.requireNonNull(this); // <---
    return n + …
Run Code Online (Sandbox Code Playgroud)

java javac java-8 ecj java-11

38
推荐指数
1
解决办法
970
查看次数

在JDK 11中是否有CORBA的替换库

JDK-11将删除JDK的许多旧部分(JEP-320).对于其中一些(例如JAXB),功能将作为常规库提供.您只需添加另一个依赖项,一切正常.

但对于CORBA则不然,因为

使用Java中的CORBA开发现代应用程序没有太大的兴趣

然而,我仍然处于痛苦的境地,需要维护仍旧需要CORBA的旧应用程序,同时仍希望更新到JDK-11.

在没有删除这些应用程序的CORBA功能的情况下,是否有替换库或迁移到JDK-11的另一种好方法?

java corba java-module java-11

35
推荐指数
3
解决办法
5787
查看次数

java.lang.IllegalAccessError:类 org.gradle.internal.compiler.java.ClassNameCollector 无法访问类 com.sun.tools.javac.code.Symbol$

我正在尝试使用 Java SE 11 和 Gradle 7.0 构建应用程序,并且它使用 IDE 构建,但是当我尝试使用终端构建它时,我收到此错误。我该如何解决它。

java.lang.IllegalAccessError: class org.gradle.internal.compiler.java.ClassNameCollector (in unnamed module @0x1d7a8227) cannot access class com.sun.tools.javac.code.Symbol$TypeSymbol (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x1d7a8227
Run Code Online (Sandbox Code Playgroud)

java gradle java-11

30
推荐指数
4
解决办法
5万
查看次数

Java 11中的空方法明显慢于Java 8

当我遇到一些令人惊讶的数字时,我正在使用jmh 1.21 比较JDK 8和11的性能:

Java version: 1.8.0_192, vendor: Oracle Corporation

Benchmark                Mode  Cnt  Score   Error  Units
MyBenchmark.emptyMethod  avgt   25  0.362 ± 0.001  ns/op


Java version: 9.0.4, vendor: Oracle Corporation

Benchmark                Mode  Cnt  Score    Error  Units
MyBenchmark.emptyMethod  avgt   25  0.362 ±  0.001  ns/op


Java version: 10.0.2, vendor: Oracle Corporation

Benchmark                Mode  Cnt  Score   Error  Units
MyBenchmark.emptyMethod  avgt   25  0.723 ± 0.001  ns/op


Java version: 11.0.1, vendor: Oracle Corporation

Benchmark                Mode  Cnt  Score   Error  Units
MyBenchmark.emptyMethod  avgt   25  0.724 ± 0.002 …
Run Code Online (Sandbox Code Playgroud)

java-8 jmh java-11

29
推荐指数
1
解决办法
1308
查看次数

线程“main”中的异常 java.lang.NoSuchMethodError: java.nio.ByteBuffer.flip()Ljava/nio/ByteBuffer

我有一个方法如下,它已经正常运行了很长时间:

private String loadFromFile(){

    RandomAccessFile inFile = null;
    FileChannel inChannel = null;
    StringBuilder sb = new StringBuilder();
    try {

        inFile = new RandomAccessFile(this.latestImageFile, "r");
        inChannel = inFile.getChannel();

        ByteBuffer bb = ByteBuffer.allocate(2046);
        while( inChannel.read(bb) != -1){
            bb.flip();

            while(bb.hasRemaining()){
                char c = (char) bb.get();   // read character at current position and set the pointer to current position + 1
                sb.append(c);
            }

            bb.clear();
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (inChannel != null) try {inChannel.close(); } catch (IOException e){} …
Run Code Online (Sandbox Code Playgroud)

java bytebuffer java-8 java-11

29
推荐指数
1
解决办法
1万
查看次数

Java中的null(输入/输出)流API的用例是什么?

使用Java 11,我可以初始化InputStream为:

InputStream inputStream = InputStream.nullInputStream();
Run Code Online (Sandbox Code Playgroud)

但我无法理解 ie 的潜在用例InputStream.nullInputStream或类似的API .OutputStreamOutputStream.nullOutputStream

从API Javadocs,我可以弄清楚它

返回一个新的InputStream读取任何字节.返回的流最初是打开的.通过调用close()方法关闭流.

后续调用close()无效.虽然流是开放的,available(),read(),read(byte[]),... skip(long),和transferTo()方法的行为都好像流的末尾已到达.

我进一步详细说明了这些说明:

有很多次我想使用需要作为目标OutputStream/Writer的参数来发送输出的方法,但是想要为其他效果静默执行这些方法.

这相当于Unix将命令输出重定向到/ dev/null,或者在DOS中将命令输出附加到NUL的能力.

然而,我无法理解陈述中声明的那些方法是什么...... 为了其他效果而默默地执行这些方法.(归咎于我没有动手使用API​​)

有人可以帮助我理解在可能的情况下借助示例获得这样的输入或输出流有什么用处吗?


编辑:我在进一步浏览时可以找到的类似实现之一是apache-commons'NullInputStream,它更好地证明了测试用例的合理性.

java inputstream outputstream apache-commons java-11

28
推荐指数
2
解决办法
927
查看次数

JavaFX 11:使用Gradle创建一个jar文件

我正在尝试将JavaFX项目从8 Java版升级到11版.当我使用"运行"Gradle任务(我遵循Openjfx教程)时,它工作,但是当我构建(使用"jar"Gradle任务)并执行(使用"java -jar")jar文件时,消息"Error :缺少JavaFX运行时组件,并且"运行此应用程序需要".

这是我的build.gradle文件:

group 'Project'
version '1.0'
apply plugin: 'java'
sourceCompatibility = 1.11

repositories {
    mavenCentral()
}

def currentOS = org.gradle.internal.os.OperatingSystem.current()
def platform
if (currentOS.isWindows()) {
    platform = 'win'
} else if (currentOS.isLinux()) {
    platform = 'linux'
} else if (currentOS.isMacOsX()) {
    platform = 'mac'
}
dependencies {
    compile "org.openjfx:javafx-base:11:${platform}"
    compile "org.openjfx:javafx-graphics:11:${platform}"
    compile "org.openjfx:javafx-controls:11:${platform}"
    compile "org.openjfx:javafx-fxml:11:${platform}"
}

task run(type: JavaExec) {
    classpath sourceSets.main.runtimeClasspath
    main = "project.Main"
}

jar {
    manifest {
        attributes 'Main-Class': 'project.Main'
    }
    from …
Run Code Online (Sandbox Code Playgroud)

jar gradle java-11 javafx-11

27
推荐指数
3
解决办法
1万
查看次数

无法将Lombok与Java 11一起使用

我们将Java版本从8升级到11但是我得到了getter/setter方法的编译错误,其中我使用Lombok的Getter和Setter Annotations实现了POJO类.

有没有办法使用Lombok的@Data注释,它提供getter和setter而不在Java 11中实现它们?

目前,我面临的错误是:

找不到getStoreName()

where storeName在类上面声明为全局变量,在类上面有@Data Lombok注释.

java lombok intellij-lombok-plugin java-11

27
推荐指数
1
解决办法
1万
查看次数

在Java 11中使用堆栈跟踪的速度明显慢于Java 8

当我遇到一些令人惊讶的数字时,我正在使用jmh 1.21 比较JDK 8和11的性能:

Java version: 1.8.0_192, vendor: Oracle Corporation

Benchmark                              Mode  Cnt      Score    Error  Units
MyBenchmark.throwAndConsumeStacktrace  avgt   25  21525.584 ± 58.957  ns/op


Java version: 9.0.4, vendor: Oracle Corporation

Benchmark                              Mode  Cnt      Score     Error  Units
MyBenchmark.throwAndConsumeStacktrace  avgt   25  28243.899 ± 498.173  ns/op


Java version: 10.0.2, vendor: Oracle Corporation

Benchmark                              Mode  Cnt      Score     Error  Units
MyBenchmark.throwAndConsumeStacktrace  avgt   25  28499.736 ± 215.837  ns/op


Java version: 11.0.1, vendor: Oracle Corporation

Benchmark                              Mode  Cnt      Score      Error  Units
MyBenchmark.throwAndConsumeStacktrace  avgt   25  48535.766 ± 2175.753 …
Run Code Online (Sandbox Code Playgroud)

performance java-8 jmh java-11

27
推荐指数
2
解决办法
2251
查看次数