问题标签 [java-11]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 从 JNI 运行时 Java ShutdownHook 无法加入主线程
我有一些 Java 代码来创建关闭挂钩,以便在客户端按下 ctrl+C 时干净地退出:
当我从命令行运行它时,它按预期工作(主线程退出并几乎立即返回到命令提示符)。但是,如果我编写一个使用以下 C++ 代码调用它的 JNI 包装器:
然后该shutdownHandler
方法挂起,直到 30 秒超时,然后将控制权返回给 C++ 代码并最终退出。有谁知道shutdownHandler
从 JNI 调用开始时允许该方法加入主线程的方法?
gradle - 使用 Java 11 运行 Sonar Scanner 时主版本号错误
我目前正在将一个项目从 java 8 迁移到 java 11,并且一直在使用带有 gradle 的 Sonar 扫描仪将代码发送到 SonaQube。迁移到 Open JDK 11 后,我在运行gradle sonarqube
任务时收到以下错误:
java.lang.IllegalArgumentException: Unsupported class file major version 55
我在网上读到扫描仪应该使用 jdk 8 运行,即使分析可以在 java 文件的一个版本上运行,但无法弄清楚这一点。
理想情况下,我将能够gradle sonarqube
使用 Java 11 JDK 运行。我发现另一个问题似乎在使用 Maven 的 Java 11 上取得了成功,但他们的错误是不同的,我认为他们的解决方案不适用于我。
这个问题是否可以解决,还是我需要等待 Sonar Scanner 支持 JDK 11?
jaxb - jdk 11 - 在未命名的模块中声明了包 javax.xml.bind.annotation,但模块 javax.xml.bind.annotation 没有读取它
javax.xml.bind
我将所有其他主题都涂红了(可能适用于 jdk 10),但在jdk 11上运行仍然存在问题。
我的依赖:
我的 IDE(最新的 intellij)仍然看不到导入:
我的 module-info.java 也没有看到:
当我使用 maven 时出现错误:
[错误] ...ExceptionType.java:[6,22] 包 javax.xml.bind.annotation 不可见(包 javax.xml.bind.annotation 在未命名的模块中声明,但模块 javax.xml.bind.注释不读)
有人在 jdk 11 上运行它吗?
编辑:1)带有java模块系统的应用程序版本:我有类似的问题: https : //youtrack.jetbrains.com/issue/IDEA-197956 但我的错误信息有点不同
2)没有java模块系统的应用版本:Maven编译正确。问题是 intellij 看不到我的导入:
并说:无法解析符号。同样在文件 > 项目结构 > 模块 > 依赖项 intellij 没有添加 javax.xml.bind 和 org.glassfish.jaxb 为什么?我在pom中添加了这个:
JDK:openjdk11 Intellij 版本:IntelliJ IDEA 2018.2.4(终极版),Build #IU-182.4505.22,构建于 2018 年 9 月 18 日,JRE:1.8.0_152-release-1248-b8 amd64 JVM:OpenJDK 64-Bit Server JetBrains sro Maven 的 VM:3.5.4
这似乎是一个智能错误。
spring-mvc - Spring boot 2.1.0 和 Java 11 - JSP 未加载
我厌倦了调查这个问题,我找不到合适的答案。实际上,我没有发现任何人使用 Java 11 和 Spring。我的 JSP 没有加载,就是这样。关于我的项目的一些信息:
这些是我的 application.yml 属性:
我的jsp文件在:
我的主要课程:
我什至尝试将我的 WEB-INF 文件夹放在 /src/main/resources 下。
接下来,这是我的依赖项列表(只是草稿复制粘贴):
我在根目录下有一个 login.jsp,我应该能够像这样https://localhost:9012/mypath/login.html,它不会加载。
11月23日星期五更新
我正在取得一些进展。我将详细解释我的应用程序。最初,这个应用程序是使用 Java 1.8 和 Spring 1.5.9.RELEASE 和 BOM 编写的,用于我的开发。该应用程序曾经在此路径下有一个 GET 控制器:“/login”。棘手的部分来了:每当您点击网址“ https://www.myapp.com/login.htm ”时,以某种我不明白的方式/某种方式,Spring 设法发送请求“ login.htm”到控制器“/login”。我不确定它是如何实现额外的“.htm”的。
现在,当我使用 Java 11 和 Spring 2.1.0.RELEASE 时,这不再起作用了。如果我点击“/login”,它将进入控制器。但我需要进行透明迁移,我无法更改逻辑。这个应用程序服务于请求,并且客户端从多年前就一直在使用“/login.htm”。我需要让“/login.htm”转到“/login”。
java - Java 11 无法解析方法,如果它是一个错误?
我对 Java 11 (OpenJDK) 有一个奇怪的编译错误:
找不到符号:方法 not(java.util.function.Predicat<java.lang.Class>) 位置:接口 java.util.function.Predicate
Intellij Idea 没有显示任何警告或错误......可能有什么问题?强制转换为 Predicate<Class> 并使 Idea 的缓存无效并没有帮助。
java - Eclipse + m2e + junit5 - 已经可能了吗?
试图让Eclipse 2018-09 + Patch 与Java 11支持、m2e和junit5一起工作。
按照junit5-modular-world示例中的建议,我在test/java下引入了第二个module-info.java。
Eclipse 的反应让我吃惊:
更改后我无法保存该文件。它只能通过关闭 Eclipse 来保存。但是,重新打开后,Eclipse一头雾水。它不能显示托管多个module-info.java的项目的任何详细信息,只能显示项目名称。
可能 Eclipse 用一个 Java 模块识别一个项目,而mvn test编译和执行的模块显然与mvn install创建的模块不同。
经历了很多我能想到的选择。目前我不得不放弃并退回到junit 4.12。
你知道更好的解决方案吗?
java - Scala 12.x 和 Java 11 `String.lines`,如何在链式调用中强制进行隐式转换?
问题描述
Scala StringOps 提供了一个lines
返回Iterator[String]
. Java 11 添加lines()
了返回类型java.Stream[String]
。
在像这样的链式方法调用中
代码将不再编译并抛出foldLeft
未在 java.Stream[String] 上定义的异常。据我了解,不再应用隐式解析,因为现在已经在 java.String 中找到了 lines 方法。
我如何表达我希望应用隐式(没有括号的那个)而不是 java.String.lines()
附加信息
- 我找到
linesIterator
了,但它已被弃用。 - 降级是一种选择,但有没有办法解决它。
val text : StringOps
看起来真的很难看,但解决了,但我对这个解决方案不满意
java - 使用 Java 11 HttpClient 读取分块数据
我正在尝试使用 Java 11 的 java.net.http.HttpClient 从 Http 响应中读取分块数据,但我一次只能得到一行。我需要一次得到一整块。
这是我的代码:
但我得到的响应是单独的行:
我意识到这是因为我正在使用 BufferedReader 并告诉它在我得到它时记录每一行,但我不知道如何将这些行读取为块。
有人可以帮我弄清楚如何以原子方式读取块,以便我可以将它们解析为 JSON,一次一个事件吗?
解决方案
必须使用 JsonProcessor 来解析 Json 到达时的流:
java - Java 11 + Chrome/Firefox = TLS 解密错误
我目前正在将一些服务器软件从 Java 8 迁移到 Java 11。除了当我的服务器在 Java 11(并且只有 11)上运行时拒绝 TLS 连接这一事实之外,一切正常。即,在 Java 10 之前(包括 Java 10)上运行时一切正常。一旦我切换到 Java 11(当然,两者之间绝对没有代码更改),我就会收到 TLS 解密错误。当我禁用 SSL/TLS 或使用 IE/Edge 连接到我的服务器(通过 TLS)时,我的应用程序可以正常工作。使用 Chrome 70 或 Firefox 62 时,我分别得到ERR_SSL_PROTOCOL_ERROR
或SEC_ERROR_BAD_SIGNATURE
。
我尝试使用 WireShark 进行分析(请参阅我的转储)。我的结论是 Java 11 和 Chrome/Firefox 协商了一个错误的密码套件 (rsa_pss_rsae_sha256),它在某种程度上不适用于 Java 11。Java 8 和 IE/Edge 似乎协商了一个不同的密码套件 (rsa_pkcs1_sha256),它有效。
有人知道如何解决这个问题或至少暂时解决这个问题(当然,除了禁用 SSL/TLS 或使用 IE/Edge)?提前致谢。
java - 无法使用 Java 10 和 Java 11 运行或导入 JAR
我无法.jar
使用 Java 10 或 Java 11 运行档案(它们以 退出NoClassDefFoundError
)。同样,我也无法将.jar
档案导入 Java 项目;它们出现在 Classpath 中,但 Eclipse 表示无法解析导入。当我降级到 Java 8 时,我能够.jar
很好地运行存档,并且它们也可以在任何导入它们的 Java 项目中被识别。
例如:
我正在导入mongo-java-driver-3.8.2
Eclipse Photon 上的 Java 项目。我将其添加.jar
到项目的类路径(项目 -> 属性 -> Java 构建路径)。但是,Eclipse 输出The import com.mongodb cannot be resolved
,如下图所示: