标签: java-11

java 11中isEmpty()和isBlank()方法的区别

Java 11isBlank()java.lang.String类添加了一个新的实例方法 .

现有方法isEmpty和新增isBlank()方法之间的基本区别是什么?

java string is-empty java-11

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

是否可以构建一个使用 SSL/TLS JAVA_OPTS 作为其 SSLContext 的 Java 11 HttpClient?

我知道HttpClientBuilder您可以使用 Apache调用useSystemProperties(),如果传递为,它将创建一个SSLContextjavax.net.ssl.keyStore(和信任库)配置的客户端JAVA_OPTS

try (CloseableHttpClient client = HttpClientBuilder.create().useSystemProperties.build()) {
  // If javax.net.ssl props are set, make requests that require client auth
  // Otherwise make regular requests
}
Run Code Online (Sandbox Code Playgroud)

我想用 Java 11 做一些类似的事情HttpClient。这样做的原因是在我的用例中,我将密钥存储和信任存储视为可选的,并且不必在我的代码中检查它们的存在会很好。基本上,我想SSLContext根据JAVA_OPTS它们是否存在来设置;否则只使用"Default"上下文

java ssl java-http-client java-11

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

@JsonInclude(Include.NON_EMPTY) 在使用 CUSTOM SERIALIZER 时不起作用

似乎当我使用自定义序列化程序时,它@JsonInclude(Include.NON_NULL)会被完全忽略。

我的要求是不要序列化值为空的键。我还想通过为多值添加空格分隔符来格式化字符串SortedSet(这就是我创建自定义序列化程序的原因)

没有任何空值的电流输出示例

{
  "age": "10",
  "fullName": "John Doe"
  "email":"doe@john.com john@doe.com test@gmail.com"
}
Run Code Online (Sandbox Code Playgroud)

具有空值的电流输出示例

{
  "age": "10",
  "fullName": "John Doe"
  "email":null
}
Run Code Online (Sandbox Code Playgroud)

电子邮件为空时的预期输出:

{
  "age": "10",
  "fullName": "John Doe"
}
Run Code Online (Sandbox Code Playgroud)

DTO

@AllArgsConstructor
@Builder
@Data
@NoArgsConstructor
@ToString
@SuppressWarnings("PMD.TooManyFields")
public class User {
    @JsonProperty("age")
    private String age;

    @JsonProperty("firstName")
    private String name;

    @JsonProperty("email")
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    @JsonSerialize(using = MultiValuedCollectionSerializer.class)
    private SortedSet<String> email;
}
Run Code Online (Sandbox Code Playgroud)

自定义序列化程序

public class MultiValuedCollectionSerializer extends JsonSerializer<Collection> {

    @Override
    public void serialize(final Collection inputCollection, 
                          final JsonGenerator jsonGenerator, 
                          final SerializerProvider …
Run Code Online (Sandbox Code Playgroud)

java json jsonserializer java-11

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

从 JDK 11 客户端到 Weblogic 10.3.6 (JDK 7) 服务器的简单 JNDI 查找不起作用

服务器环境:Weblogic 10.3.6,JDK 1.7

我有一个使用JDK 7运行的简单工作 Java SE 客户端应用程序。在客户端,我正在对上面提到的资源托管服务器进行非常简单的 JNDI 外观。

ClassPath 中的罐子: wlthint3client.jar

public static void main(String[] args) throws Exception {
    Hashtable t = new Hashtable();
    t.put(InitialContext.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    t.put(InitialContext.PROVIDER_URL, "t3://localhost:7003/");
    InitialContext ic = new InitialContext(t);

    String jndiName = "weblogic.jdbc.DataSource.Workflow";

    Object obj = ic.lookup(jndiName);
    System.out.println("Found it");
}
Run Code Online (Sandbox Code Playgroud)

我必须我的工作 Java SE 客户端应用程序从JDK 7升级到 JDK 11。服务器环境保持不变。

一旦我将客户端升级到 JDK 11,我就会遇到以下错误。这是意料之中的,因为 corba jar 已从 JDK 11 中移出。

Exception in thread "main" java.lang.NoClassDefFoundError: org/omg/CORBA/SystemException
    at weblogic.jndi.WLInitialContextFactoryDelegate.<clinit>(WLInitialContextFactoryDelegate.java:202)
    at weblogic.jndi.spi.EnvironmentManager$DefaultFactoryMaker.<clinit>(EnvironmentManager.java:27) …
Run Code Online (Sandbox Code Playgroud)

corba jndi weblogic11g java-11

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

ZonedDateTime更改行为jdk 8/11

我正在将应用程序从jdk 8迁移到11,我可以看到ZonedDateTime更改是关于夏时制的行为。JDK8

        ZonedDateTime parse = ZonedDateTime.parse("2037-05-10T19:15:00.000+01:00[Europe/Paris]");
        System.out.println(parse);
Run Code Online (Sandbox Code Playgroud)

输出:2037-05-10T19:15 + 02:00 [Europe / Paris]

JDK11 / 12

        ZonedDateTime parse = ZonedDateTime.parse("2037-05-10T19:15:00.000+01:00[Europe/Paris]");
        System.out.println(parse);
Run Code Online (Sandbox Code Playgroud)

2037-05-10T20:15 + 02:00 [欧洲/巴黎]

有人可以向我解释为什么他们会改变这种行为吗?

最好的祝福,

java java-8 zoneddatetime java-11 java-12

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

Oracle JDK11(LTS)-作为开发人员/测试人员,我可以从Oracle免费获得LTS更新吗?

作为开发人员,我希望从Oracle(Oracle JDK)安装JDK11二进制分发版,并从Oracle获得7年(LTS)的免费更新。这可以免费吗?

我认为这是不可能的,因为从JDK11出现在Oracle网站上开始的6个月后,我将无法从Oracle网站下载它(具有任何最新更新的Oracle JDK 11版本,如11.0.2),并且我将无法下载无需Oracle付费订阅就可以找到(在Oracle网站上)此类更新的下载位置(对于OracleJDK)。我想我可以搜索OpenJDK 11付费的替代品,以获得超过6个月的更新(例如Red Hat),但是我不知道有任何免费替代品-请告知!

我知道以下内容(如果我输入错了,请纠正我):

  1. 从Oracle JDK9开始,这种JDK在生产中的任何使用(即使只是使用,而不仅仅是获得更新-因此也要支付使用而无需更新)。但是在开发,测试,原型制作和演示中的任何使用仍然是免费的!
  2. 看来,对于OracleJDK使用也是免费的,如果我使用任何Oracle云服务或Oracle SQL Developer中IDE(见的“许可权利和限制”部分的许可证和“甲骨文认可的产品使用” 的定义
  3. 我可以在生产中免费使用OpenJDK(JDK9,JDK10等),这些JDK与Oracle JDK完全相同,唯一的区别是早期的OpenJDK没有二进制文件(在jdk.java.net中,它们只有源文件)作为zip)(但是二进制文件现在可以在https://jdk.java.net/archive/http://jdk.java.net/12/上找到),除了acceptopenjdk.net还 提供由OpenJDK制成的二进制文件(src取自openjdk.java.net网站)。
  4. 在JDK8之前,OracleJDK和OpenJDK之间存在显着差异(性能,稳定性等),但是从JDK9开始,这些差异将消失(Oracle声称是这样,我不知道现实)。
  5. 仅为OracleJDK(针对LTS版本JDK8,JDK11,预期的JDK17)提供LTS更新。LTS版本每3年发布一次,每个版本至少要支持7年。
  6. 因此,如果我使用OpenJDK JDK11,我将绝对不会得到任何更新(既不是6个月,也不是1年,也不是7年)。
  7. 如果我有一个来自Oracle的非LTS(例如JDK12)(仅在生产中才付费),我将仅获得大约6个月的更新-直到JDK13发布为止,而且不再(甚至是花钱)。
  8. 如果我有来自OpenJDK的非LTS(例如JDK12),我也将绝对没有更新 -我可以在jdk.java.net上以源代码(zip)的形式下载第一个JDK12,也可以作为二进制发行版(用于Windows的exe安装程序)下载),在acceptopenjdk.net

有一个带有OpenJDK 更新的奇怪站点(Mercurial回购?),但是我似乎没有任何实用的方法来使用该站点。

我认为社区中存在一些讨论,现在该如何处理OpenJDK版本的更新-谁以及如何做。但是今天没有人这样做。

另外,RedHat 似乎为OpenJDK提供了一些更新,但是我不了解整个情况。我猜想,如果我为RHEL付费,那么他们会更新我的JDK作为RHEL的一部分(这就像购买Oracle JDK,但可能更便宜,我不知道。此外,RHEL似乎使用OpenJDK,而不是OracleJDK。确保OpenJDK和OracleJDK现在完全相同,正如Oracle声称的那样)。

关于OpenJDK的更新(不存在这样的更新?!),我不明白这一点-如果甲骨文声称,它是Oracle在谁的网站jdk.java.net OpenJDK的提供释放(参见(!)(!)prooflink),为什么甲骨文在至少6个月内还没有为这些OpenJDK提供更新(dk.java.net站点上没有此类更新)?OracleJDK和OpenJDK现在“完全相同”,Oracle仍将OracleJDK更新为6个月-为什么不同时将OpenJDK也更新为6个月? 在此处输入图片说明

PS 看起来甲骨文承诺将有助于安全更新的OpenJDK 季度(而不是任何其他更新:性能更新,稳定性更新,如Oraccle JDK,如果我付的“Java SE认购”,其中包括更新和在线/电话支持24/7在服务器或云中每个处理器每月25美元): 在此处输入图片说明

同样有趣的是,Mark Rotteveel(请参见注释)写道,JDK源代码只有一个地方:(可能http://hg.openjdk.java.net/ 我不知道与http:/的区别/openjdk.java.net/),甚至Oracle(及其他)也从那里获取代码: …

java java-11

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

如何使按钮背景更改 OnClick

我正在尝试使用 Scene Builder 解决我正在使用 javafx 11 和 java11 处理的计算器项目的问题。我试图找出一种方法,让计算器上的按钮在从键盘输入相应的值时改变颜色。是否有解决此问题的方法或 onKeyPressed 等类型的解决方案?

当用户用鼠标单击按钮时,我能够使按钮改变颜色(变为绿色)。这是在我的 css 样式表中完成的。我尝试向控制器类中的 onKeyReleased 方法添加一个方法,并且可以通过这种方式更改背景,但无法确定一种在不导致 UI 延迟的情况下及时更改颜色的方法。我希望 UI 更改类似于大多数计算器(例如标准 Windows 计算器)的颜色。这是用户按住键并改变颜色的地方,当释放键时它又变回。

//main.java
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;

public class Main extends Application {

@Override
public void start(Stage primaryStage) throws Exception {
    Parent root = 
 FXMLLoader.load(getClass().getResource("calculator.fxml"));
    primaryStage.getIcons().add(new Image("CALC.png"));
    primaryStage.setTitle(" TS Calculator");
    primaryStage.setScene(new Scene(root, 250, 375));
    primaryStage.setResizable(true);
    primaryStage.setMinHeight(375);
    primaryStage.setMinWidth(250);
    primaryStage.show();
}
public static void main(String[] args) {
    launch(args);
}

 /CSS
Button{
-fx-background-color: black;
-fx-text-align: …
Run Code Online (Sandbox Code Playgroud)

java javafx fxml java-11 javafx-11

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

在module-info中导入swing包

我试图在一个简单的java项目中使用swing API,其中需要在module-info.java中导入javax.swing包

我在 Eclipse IDE 上使用 openJDK-11

module ml.garba.testeur {
    requires javax.swing; 
}
Run Code Online (Sandbox Code Playgroud)

这是 JFrame 实例

package ml.garba.testeur.vue;

import javax.swing.JFrame;

public class Fenetre_Testeur extends JFrame {

}
Run Code Online (Sandbox Code Playgroud)

似乎swing 包的导入不起作用。

我需要帮助

java swing java-module java-11

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

在 Java 8 和 Java 11 中使用 --version 和 -version 检查版本

爪哇 11

JAVA_HOME : C:\Program Files\Java\jdk-11.0.4
Run Code Online (Sandbox Code Playgroud)

我能够使用以下命令在 cmd 中找到 Java 版本:

java --version  //successfully executed

java -version  //successfully executed
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

爪哇 8

 JAVA_HOME : C:\Program Files (x86)\Java\jdk1.8.0_231
Run Code Online (Sandbox Code Playgroud)

我能够使用以下命令在 cmd 中找到 Java 版本:

java -version  //successfully executed
Run Code Online (Sandbox Code Playgroud)

虽然我无法通过--version命令找到 java 版本

java --version  //not successfully executed
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

为什么我在执行时收到无法创建 Java 虚拟机的错误--version,或者jdk 8 中没有此命令选项?如果它是在 jdk 11 中添加的,那么它在 doc 中的哪里提到了?

java java-8 java-11

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

扫描 Spring Boot .jar 文件时在 Java 11 jdeps 工具上获取 NPE

当我试图在我的自定义 JRE 中找到需要链接的 Java 模块时,我确实从jdeps工具中获得了一个 NPE :

marc$ jdeps --module-path $JAVA_HOME/jmods --print-module-deps --multi-release 11 target/blha/jx1-0.0.1-SNAPSHOT/BOOT-INF/lib/*.jar
Exception in thread "main" java.lang.NullPointerException
    at jdk.jdeps/com.sun.tools.jdeps.ModuleGraphBuilder.requiresTransitive(ModuleGraphBuilder.java:124)
    at jdk.jdeps/com.sun.tools.jdeps.ModuleGraphBuilder.buildGraph(ModuleGraphBuilder.java:110)
    at jdk.jdeps/com.sun.tools.jdeps.ModuleGraphBuilder.reduced(ModuleGraphBuilder.java:65)
    at jdk.jdeps/com.sun.tools.jdeps.ModuleExportsAnalyzer.modules(ModuleExportsAnalyzer.java:124)
    at jdk.jdeps/com.sun.tools.jdeps.ModuleExportsAnalyzer.run(ModuleExportsAnalyzer.java:97)
    at jdk.jdeps/com.sun.tools.jdeps.JdepsTask$ListModuleDeps.run(JdepsTask.java:1023)
    at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:560)
    at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:519)
    at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:49)
Run Code Online (Sandbox Code Playgroud)

知道如何找到我需要链接到此 Spring Boot 项目的自定义 JRE 的所有模块吗?

java java-module java-11

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