标签: java-9

Map.of()与Collections.emptyMap()

Map.of()Collections.emptyMap()之间List.of(),Collections.emptyList()和之间Set.of()和之间是否存在差异Collections.emptySet()

java collections java-9

17
推荐指数
1
解决办法
1199
查看次数

使用Gradle构建Kotlin + Java 9项目

我对Gradle(和Java 9,说实话)相当新,我正在尝试使用Gradle构建一个简单的库项目,它是Java 9和Kotlin的混合体.更详细的说,Java中有一个接口,Kotlin中有一个实现; 我会在Kotlin做一切,但modules-info.java无论如何都是java,所以我决定这样做.

我正在构建IntelliJ Idea,外部定义了1.2.0 kotlin插件和gradle 4.3.1.

文件系统架构是:

+ src
  + main
    + java
      + some.package
        - Roundabout.java [an interface]
      - module-info.java
    + kotlin
      + some.package.impl
        - RoundaboutImpl.kt [implementing the interface]
Run Code Online (Sandbox Code Playgroud)

module-info.java 是:

module some.package {
  requires kotlin.stdlib;
  exports some.package;
}
Run Code Online (Sandbox Code Playgroud)

build.gradle是:

buildscript {
    ext.kotlin_version = '1.2.0'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

group 'some.package'
version '1.0-PRE_ALPHA'

apply plugin: 'java-library'
apply plugin: 'kotlin'

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

sourceCompatibility = …
Run Code Online (Sandbox Code Playgroud)

java gradle kotlin java-9

17
推荐指数
1
解决办法
5044
查看次数

错误:java:invalid flag:-release

我用Java:

Java(TM) SE Runtime Environment (build 9-ea+143) Java HotSpot(TM) 64-
Bit Server VM (build 9-ea+143, mixed mode)
Run Code Online (Sandbox Code Playgroud)

IntelliJ IDEA:

IntelliJ IDEA 2016.2.5 Build #IU-162.2228.15, built on October 14,
2016
Run Code Online (Sandbox Code Playgroud)

编译时出错:

Error:java: invalid flag: -release
Run Code Online (Sandbox Code Playgroud)

执行javac -help:

--release <release>
        Compile for a specific VM version. Supported targets: 6, 7, 8, 9
Run Code Online (Sandbox Code Playgroud)

所以javac应该使用两个连字符和释放,但Intellij Idea使用一个.

我可以覆盖javacIDEA使用的选项或以某种方式修复它吗?

UPD:甚至构建,执行,部署>编译器> Java编译器附加命令行参数在这种情况下没有帮助

java intellij-idea java-9

16
推荐指数
4
解决办法
2万
查看次数

目标不是JDK根.找不到系统库.Eclipse Oxygen 4.7 + Java9错误

我正在尝试使用Eclipse Oxygen IDE测试JDK9(jdk-9-ea + 147版本).

我已经安装了jdk和jre.来自Eclipse Market Place我已经安装了Java9 Beta扩展:

在此输入图像描述

问题是,当我尝试从Eclipse添加新安装的jre时,我收到以下错误:

在此输入图像描述

有趣的是,以前的JDK版本的安装不会发生此错误:

在此输入图像描述

是否有人遇到Eclipse Oxygen的simillar问题?任何反馈都表示赞赏.

java eclipse java-9 eclipse-oxygen

16
推荐指数
4
解决办法
3万
查看次数

Netbeans 8.2与jdk 9

我有关于netbeans的hdpi问题,当我打开它时图标变得太小了.然后我发现了下面的问题.有人说jdk9修复了分辨率问题.

https://netbeans.org/bugzilla/show_bug.cgi?id=252452

这是我的环境:

  • 操作系统:Windows 10(64位)
  • JDK:JDK9 BUILD149
  • netbeans 8.2

我在windows10上下载了jdk9和netbeans8.2,希望JDK9可以修复烦人的资源问题.不幸的是,我无法打开netbeans.

我在cmd中输入后. netbeans.exe --jdkhome "C:\Program Files\Java\jdk-9" 控制台显示错误.


No way to find original stream handler for jar protocol
java.lang.reflect.InaccessibleObjectException: Unable to make field transient java.net.URLStreamHandler java.net.URL.handler accessible: module java.base does not "opens java.net" to unnamed module @4973813a
        at java.base/jdk.internal.reflect.Reflection.throwInaccessibleObjectException(Reflection.java:427)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:201)
        at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:171)
        at java.base/java.lang.reflect.Field.setAccessible(Field.java:165)
        at org.netbeans.ProxyURLStreamHandlerFactory.register(ProxyURLStreamHandlerFactory.java:82)
        at org.netbeans.JarClassLoader.(JarClassLoader.java:141)
        at org.netbeans.MainImpl.execute(MainImpl.java:178)
        at org.netbeans.MainImpl.main(MainImpl.java:85)
        at org.netbeans.Main.main(Main.java:83)

Run Code Online (Sandbox Code Playgroud)

有谁知道如何在Netbeans中使用jdk9?

java netbeans hdpi java-9

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

在将Java 8项目迁移到Jigsaw时,我应该在哪里放置单元测试

我目前正在测试使用jdk-9 + 149将Java 8应用程序迁移到Java 9/Jigsaw.

该项目已在标准的Maven目录结构进行布局,即具有src/main/java,src/test/java等等.

当我添加module-info.javasrc/main/java,Maven的编译器插件无法抛出一个NullPointerException.这是因为它希望找到test目录的模块信息.所以,据我所知,选项是:

  • 将测试类保存在单独的模块中,这意味着它们只能访问主模块的导出包.
  • 将测试类与源一起移动到主模块中,这意味着主模块需要测试依赖性.

显然,这些选项似乎都不合适,所以我假设有一种在Maven项目中测试Jigsaw模块的推荐方法.不幸的是,我既没有找到建议也没有例子.

编辑:在发布问题时添加一些我不相关的信息(对不起)

migration unit-testing maven java-platform-module-system java-9

16
推荐指数
2
解决办法
1522
查看次数

Tomcat 7.0.73不适用于Java 9

由于catalina.sh中的默认"java.endorsed.dirs"选项,因此无法使用java 9启动基于tomcat的应用程序.

-Djava.endorsed.dirs=/usr/local/share/tomcat/endorsed is not supported. Endorsed standards and standalone APIs in modular form will be supported via the concept of upgradeable modules. 
Error: Could not create the Java Virtual Machine. 
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)

有没有解决这个问题?

java tomcat tomcat7 java-9

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

JDK dateformater在德语语言环境中解析DayOfWeek,java8 vs java9

我在Java 8(1.8.0_77)和Java 9(Java HotSpot(TM)64位服务器VM(构建9 + 181,混合模式)中尝试了一些代码)

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("eee", Locale.GERMAN);
DayOfWeek mo = dtf.parse("Mo", DayOfWeek::from);
System.out.println("mo = " + mo);
Run Code Online (Sandbox Code Playgroud)

我不太熟悉这些类的细节,但在Java 8中这个工作,打印:

mo =星期一

在Java 9中,它失败了

线程"main"中的异常java.time.format.DateTimeParseException:无法在java.base上的java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1988)的索引0处解析文本"Mo"在day.main(day.java:10)的/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1890)

任何想法,这是可重现的吗?

因此,在格式化时:使用此代码:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("eee", Locale.GERMAN);
String format = dtf.format(DayOfWeek.MONDAY);
System.out.println("format = " + format);
Run Code Online (Sandbox Code Playgroud)

jdk1.8.0-77:

格式= Mo.

jdk-9(build 9 + 181)

格式= Mo.

java java-8 java-time java-9

16
推荐指数
2
解决办法
639
查看次数

从外部模块访问资源文件

到目前为止,直到非模块化的java,你只需要放入一个文件,src/main/java/resources确保它在classpath中,然后加载它

file = getClass().getClassLoader().getResourceAsStream("myfilename"); 
Run Code Online (Sandbox Code Playgroud)

来自类路径中的任何位置.

现在有了模块,情节变浓了.

我的项目设置如下:

module playground.api {
    requires java.base;
    requires java.logging;
    requires framework.core;
}
Run Code Online (Sandbox Code Playgroud)

配置文件放在里面src/main/resources/config.yml.

项目运行

java -p target/classes:target/dependency -m framework.core/com.framework.Main
Run Code Online (Sandbox Code Playgroud)

由于主类不在我自己的项目中,而是在外部框架模块中,因此无法看到config.yml.现在的问题是,有没有办法以某种方式将我的配置文件放入模块或打开它?我是否必须更改框架上游加载文件的方式?

我尝试在module-info中使用"exports"或"opens",但它想要一个包名,而不是文件夹名.

如何以最佳实用的方式实现这一点,以便它可以像Java 8一样工作,并尽可能少地进行更改?

java java-platform-module-system java-9

16
推荐指数
2
解决办法
5946
查看次数

"Swing-Shell"java.lang.InternalError:无法初始化COM:HRESULT = 0x80010106

我有一个Java 9应用程序,我正在尝试为Windows应用商店打包.奇怪的是,当我直接运行exe-launcher时,它按预期工作,但是当我通过APPX包运行启动器时,我得到以下奇怪的错误:

Exception in thread "Swing-Shell" java.lang.InternalError: Could not 
initialize COM: HRESULT=0x80010106 
at java.desktop/sun.awt.shell.Win32ShellFolderManager2.initializeCom(Native Method) 
at java.desktop/sun.awt.shell.Win32ShellFolderManager2$ComInvoker$1.run(Unknown Source at java.base/java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

HRESULT=0x80010106意味着RPC_E_CHANGED_MODE我猜意味着COM以某种方式已经在MTA模式初始化.但为什么这只是Windows Bridge沙箱中的一个问题?pre-initialize出于某种原因,Windows桥以某种方式某种程度上是COM吗?

我不确定这是Java 9问题,还是Desktop Bridge问题,或两者兼而有之.有没有人对如何确定问题的原因或解决方法有任何想法?

我已经制作了一个最小的示例项目来重现该问题

应用程序在直接执行时有效,但在通过APPX启动程序执行时无效.为什么?

windows-store java-9 desktop-bridge

16
推荐指数
1
解决办法
506
查看次数