prefacio
En el trabajo, es inevitable que encuentre actualizaciones. Esta vez, debido a los dos sistemas, el sistema A usa la versión JDK8 y el sistema B usa la versión JDK11; se requiere sincronizar la versión JDK, es decir, actualizar a la versión 11. Entonces lo presentaré a continuación ~
problema y solución
1. El problema de que no se puede iniciar el script .sh
problema descubierto
Dado que no hay cambios en el script, no hay problema para iniciar jdk8 y se puede iniciar con éxito, pero no se puede iniciar jdk11.
causa
(1) JDK 11 ya
弃用
tiene-XX:PermSize
parámetros y-XX:MaxPermSize
parámetros, lo que provocará una falla en el inicio. (Estos dos parámetros se usan para establecer el tamaño inicial y el tamaño máximo de la memoria de generación permanente en JDK 8 y versiones anteriores). (
2)-XX:+PrintGCDateStamps
Este parámetro es compatible con JDK 8 y JDK 9, pero se puede usar en versiones anteriores. habrá casos en los que no se admita.
La solución
(1) ① Retire
-XX:PermSize
los parámetros y-XX:MaxPermSize
parámetros. ② Use el parámetro y en lugar de parámetro y parámetro en
JDK 11. (Nota: el parámetro y el parámetro en JDK 11 son para establecer el tamaño de la memoria del metaespacio). (2) Elimine este parámetro.-XX:MetaspaceSize
-XX:MaxMetaspaceSize
-XX:PermSize
-XX:MaxPermSize
-XX:MetaspaceSize
-XX:MaxMetaspaceSize
-XX:+PrintGCDateStamps
2. Reemplazo de javafx.util.Pair
problema descubierto
Aparece al iniciar el proyecto
Error:(27, 19) java: 程序包javafx.util.Pair不存在
.
causa
JDK 11
Ya no está incrustadojavafx
.
La solución
(1) Si solo se usa
javafx.util.Pair
, se puede reemplazar por otras dependencias importadas. (cn.hutool.core.lang.Pair
como etc.)
(2) El proyecto introduce dependencias relacionadas de JavaFX.
[Introduzca las dependencias relacionadas con JavaFX] (haga clic para ampliar)
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11</version>
</dependency>
</dependencies>
3. sun.misc.BASE64Decoder 替换
发现的问题
启动项目的时候,出现
Error:(5, 16) java: 程序包sun.misc不存在
。
导致的原因
JDK 9
之后已经删除和弃用sun.misc
。
解决的办法
(1) 如果是需要替换
sun.misc.BASE64Decoder
,可以考虑java.util.Base64
代替掉sun.misc.BASE64Encoder
和sun.misc.BASE64Decoder
。
【sun.misc.BASE64Decoder 替换 java.util.Base64 实例】(点击展开)
import org.apache.commons.lang3.StringUtils;
import sun.misc.BASE64Decoder;
import java.util.Base64;
/**
* TODO:升级 jdk11 替换 被弃用 base64 示例
*
* @Author: nanfangzhe
* @DateTime: 2023/6/1 20:10
**/
public class Base64Utils {
public static void main(String[] args) {
String txt = "南方者";
try {
String oldEncode = OldBase64Decode.base64Encode(txt.getBytes());
System.out.println("sun.misc.BASE64Decoder Encode:" + oldEncode);
String newEncode = NewBase64Decode.base64Encode(txt.getBytes());
System.out.println("java.util.Base64 Encode:" + newEncode);
byte[] oldBytes = OldBase64Decode.base64Decode(oldEncode);
System.out.println("sun.misc.BASE64Decoder Decode:" + new String(oldBytes));
byte[] newBytes = NewBase64Decode.base64Decode(newEncode);
System.out.println("java.util.Base64 Decode:" + new String(newBytes));
} catch (Exception e) {
e.printStackTrace();
}
}
}
// jdk 8之前的版本
class OldBase64Decode {
/**
* TODO:Decode
*/
public static byte[] base64Decode(String txt) throws Exception {
if (StringUtils.isBlank(txt)) {
return null;
}
byte[] bytes = new BASE64Decoder().decodeBuffer(txt);
return bytes;
}
/**
* TODO:Encode
*/
public static String base64Encode(byte[] bytes) {
return Base64.getEncoder().encodeToString(bytes);
}
}
// jdk11版本
class NewBase64Decode {
/**
* TODO:Decode
*/
public static byte[] base64Decode(String txt) throws Exception {
if (StringUtils.isBlank(txt)) {
return null;
}
byte[] bytes = Base64.getDecoder().decode(txt);
return bytes;
}
/**
* TODO:Encode
*/
public static String base64Encode(byte[] bytes) {
return Base64.getEncoder().encodeToString(bytes);
}
}
要点
【要点】(点击展开)
由于不过于纠结 JDK11 版本升级 弃用删除
了哪些方法
或者哪些类不再内嵌
。最快的方法是直接修改版本后,启动再发现缺失的东西,再进行替换、去掉、或者其他依赖方法进行处理。
- 修改 JDK 版本
- 直接启动,等待缺少需要
总结
本篇文章介绍了, jdk8 升级 jdk11 的一些注意问题。主要围绕-
- .sh 脚本启动无法启动问题
- javafx.util.Pair 替换
- sun.misc.BASE64Decoder 替换
- ... (后续碰到会持续更新)
(主要要点:)
文章小尾巴
【文章小尾巴】(点击展开)
文章写作、模板、文章小尾巴可参考:《写作“小心思”》
感谢你看到最后,最后再说两点~
①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
我是南方者,一个热爱计算机更热爱祖国的南方人。
(文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)