当我从 Java 11 切换到 Java 17(从 Ubuntu 20.04 存储库安装 OpenJDK)后,以下代码不起作用:
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.exception.ExceptionUtils;
public class TestClass {
public static void main(String[] args) {
CompletableFuture<String> streamFuture = CompletableFuture.supplyAsync(() -> {
throw MyException.wrapIfNeeded(new Exception("MyException"));
});
String result = null;
try {
result = streamFuture.get();
} catch (Exception e) {
System.out.println("Exception: " + ExceptionUtils.getMessage(e));
}
System.out.println("Result: " + Objects.toString(result));
}
static class MyException extends RuntimeException {
private static final long serialVersionUID = 3349188601484197015L;
public MyException(Throwable cause) {
super(cause …Run Code Online (Sandbox Code Playgroud) 简而言之,在 Java 的 LTS 版本 (Java 17) 中,我们第一次有了关键字sealed,它使我们能够限制层次结构:
public abstract sealed class Person
permits Employee, Manager {
//...
}
Run Code Online (Sandbox Code Playgroud)
如果我想创建一个扩展基类的新子类Person,我也必须修改基类。这是否违反开闭原则?
Java 11 和 17 之间的货币格式更改为:
\nNumberFormat.getCurrencyInstance(Locale.CANADA_FRENCH).format(100.00)\nRun Code Online (Sandbox Code Playgroud)\n将打印100,00\xc2\xa0$\xc2\xa0CA而不是100,00\xc2\xa0$.
还有比这更好的方法来删除国家代码吗CA?
var currencyFormat = NumberFormat.getCurrencyInstance(Locale.CANADA_FRENCH);\nif (currencyFormat instanceof DecimalFormat decimalFormat) {\n var symbols = DecimalFormatSymbols.getInstance(Locale.CANADA_FRENCH);\n symbols.setCurrencySymbol("$");\n decimalFormat.setDecimalFormatSymbols(symbols);\n}\nRun Code Online (Sandbox Code Playgroud)\n只是为了恢复直到最近为止的默认行为似乎有点太多了。
\n我在尝试使用 Netbeans 13 生成 .exe 文件时遇到了这个问题。(打包为 -> exe 安装程序)
完整错误:
C:\Users\*\Documents\NetBeansProjects\*\nbproject\build-native.xml:428: The following error occurred while executing this line:
C:\Users\*\Documents\NetBeansProjects\*\nbproject\build-native.xml:436: Unable to create javax script engine for javascript
BUILD FAILED (total time: 4 seconds)
Run Code Online (Sandbox Code Playgroud)
有谁知道这里似乎有什么问题以及如何解决它?
更新:
操作系统:Windows 10
JavaFX:javafx-sdk-17.0.2
JDK:jdk-17.0.2
我在期待什么?
确实不需要发布代码,因为构建项目和运行项目本身都很顺利(没有错误)。尝试使用 Package As -> EXE Installer 生成 .exe 安装程序文件后出现问题(如图所示):
您可以返回查看完整错误,当我打开 build-native.xml 文件时,它会将我指向以下代码行:
<target name="-jfx-copylibs" depends="init,compile,-pre-pre-jar,-pre-jar,-jfx-copylibs-warning" unless="fallback.no.javascript">
<jfx-copylibs-js-impl/>
</target>
<target name="-jfx-copylibs-warning" if="fallback.no.javascript">
<echo message="Warning: Dependent Libraries copy (-jfx-copylibs) skipped in fallback build mode due to JDK missing …Run Code Online (Sandbox Code Playgroud) 在我们将容器迁移到 alpine_java-17 后,Excel 导出功能失败并出现以下错误:
java.lang.UnsatisfiedLinkError: no fontmanager in system library path: /usr/lib/jvm/java-17-openjdk/lib
Run Code Online (Sandbox Code Playgroud)
在我的 Dockerfile 中我安装了:
RUN apk add --no-cache fontconfig
RUN apk add --no-cache ttf-dejavu
RUN apk add --no-cache freetype
Run Code Online (Sandbox Code Playgroud)
这是 Dockerfile 的简短版本:
FROM custom_registry/alpine_java-17
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk
# procps to have the binary 'pgrep'
RUN apk update
RUN apk add curl
RUN apk add procps
#here's mu solution to fix the issue
RUN apk add --no-cache fontconfig
RUN apk add --no-cache ttf-dejavu
RUN apk add --no-cache freetype
# install bash …Run Code Online (Sandbox Code Playgroud) 如何调试 JavaFX Web 视图?我找到两种方法,
Method#1 似乎使用了一些 hack,比如设置对私有字段的访问权限等。Method#2 依赖于 firebuglite,它现在似乎已经过时了。
2022年应该怎么做。还有其他方法,或者更好的方法吗?
我现在正在尝试 firebug lite 方法,并且已将 javascript 作为 Maven 项目的一部分,并尝试将其作为字符串而不是外部 URL 注入,因为 firebug 似乎现在没有正确地公开托管。
这就是我现在所处的位置:
package xyz.jphil.internal_browser;
import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpServer;
import java.net.InetSocketAddress;
import javafx.scene.web.WebEngine;
import netscape.javascript.JSObject;
/**
*
* @author Ivan
*/
public class WebkitDebugUtils {
private static int resourcesPort = 0;
public static void createHttpServerForLocalFiles() {
int portStart = 64321, endPort = 65534;
resourcesPort = portStart + (int) ((endPort * 1d …Run Code Online (Sandbox Code Playgroud) 如果我正确地阅读了 JLS \xc2\xa78.1.6和\xc2\xa79.1.4,则密封类/接口允许的类只是直接子类/接口。
\n为了说明这一点,请考虑以下示例:
\npublic sealed interface I1 permits I2, C, D { /*...*/ }\npublic final class C implements I1 { /*...*/ }\npublic final class D implements I1 { /*...*/ }\n\npublic sealed interface I2 extends I1 permits E, F { /*...*/ }\npublic final class E implements I2 { /*...*/ }\npublic final class F implements I2 { /*...*/ }\nRun Code Online (Sandbox Code Playgroud)\n如果我正确理解了规范,I1显然允许CandD但不允许Eand F(通过fromextends的层次结构)。它是否正确?I2 …
我需要将 SSL 证书文件添加到 JVM 信任存储区。我安装了 java oracle 8 和 java attendium 17。
通过此链接,我已成功添加 java 8 的证书,并且可以使用该证书进行通信。这是命令
keytool -importcert -alias startssl -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -file ca.crt
Run Code Online (Sandbox Code Playgroud)
但现在我也需要将其添加到 java 17 中。使用相同的命令,我无法添加证书。我发现对于 java 17JAVA_HOME没有目录jre/lib/security,而是有conf/security目录。所以我将命令更改为这个
keytool -importcert -alias startssl -keystore $JAVA_HOME/conf/security/cacerts -storepass changeit -file ca.crt
Run Code Online (Sandbox Code Playgroud)
此命令在文件夹cacerts下生成文件security,但我仍然收到错误。在添加证书之前,我在 java 8 中遇到了同样的错误。我应该把这个cacertsjava 17 文件放在哪里?
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at …Run Code Online (Sandbox Code Playgroud) Java 17 引入了密封类,它只允许特定的类扩展它们,否则将是最终的
我了解技术用例,但想不出任何现实生活中的用例会有用吗?
我们什么时候只希望特定的类能够扩展特定的类?
在我们自己的项目中,如果我们想要一个新的类来扩展密封类,我们不能将其添加到允许的类中吗?在这种情况下,为了避免轻微的开销,不将课程定为最终课程或密封课程不是更好吗?
另一方面,在公开库供外部使用时,密封类如何事先知道它应该允许扩展哪些类?
JEP 306在 Java 17 中实现,提供始终严格的浮点语义,弃用该strictfp标志。这是否意味着java.lang.Math可以指望其行为与 中的类似方法完全相同StrictMath(即,该java.lang.Math方法不能再被 JVM 替换为过去所允许的内在函数)?这是否也意味着无论使用哪个库,不同架构之间的浮点数学结果不应再有任何差异?
我很好奇我是否误解了新的 Java 17 功能,因为我们确实看到 Apple Silicon 与 Intel 之间今天的代码存在差异。
java-17 ×10
java ×9
sealed-class ×2
alpine-linux ×1
asynchronous ×1
cldr ×1
currency ×1
docker ×1
freeze ×1
javafx ×1
javafx-11 ×1
jvm ×1
netbeans ×1
netbeans-13 ×1
sealed ×1
ssl ×1
strictfp ×1