如何解决ThinkOrSwim在Azul Zulu JDK11下的非法反射访问及环境配置问题
问题与解决方案
问题概述
运行ThinkOrSwim时持续出现非法反射访问警告,已升级至Azul Zulu OpenJDK 11但警告未消除;同时存在JAVA_HOME环境变量不生效、update-alternatives未识别全部Zulu11版本的问题。
1. 非法反射警告详情
执行启动命令后输出如下警告:
jesse@jesse-G74Sx:~/Programs/thinkorswim/thinkorswim$ sudo java -jar launcher.jar [sudo] password for jesse: WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.devexperts.jnlp.JavaLibraryPathUpdater (file:/home/jesse/Programs/thinkorswim/thinkorswim/suit/1975.0.80/tos-suit-1975.0.80.jar) to field java.lang.ClassLoader.usr_paths WARNING: Please consider reporting this to the maintainers of com.devexperts.jnlp.JavaLibraryPathUpdater WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release
2. 当前Java配置状态
- PATH已指向Zulu11的bin目录:
jesse@jesse-G74Sx:/$ echo $PATH /usr/lib/jvm/zulu11/bin:/home/jesse/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin - update-alternatives仅显示2个Java选项,未包含全部Zulu11版本:
jesse@jesse-G74Sx:/$ sudo update-alternatives --config java There are 2 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/lib/jvm/zulu11/bin/java 2115801 auto mode * 1 /usr/lib/jvm/zulu11/bin/java 2115801 manual mode 2 /usr/lib/jvm/zulu8/jre/bin/java 1806401 manual mode Press <enter> to keep the current choice[*], or type selection number: 1 - 修改/etc/environment添加JAVA_HOME但未生效:
jesse@jesse-G74Sx:/$ echo $JAVA_HOME - /usr/lib/jvm下存在多个Zulu11版本,但未被update-alternatives识别:
jesse@jesse-G74Sx:/usr/lib/jvm$ ls zulu11 zulu-11-amd64 zulu11-ca-amd64 zulu8 zulu-8-amd64 zulu8-ca-amd64
解决方案
1. 消除非法反射访问警告
该警告由ThinkOrSwim依赖的第三方库使用Java 9+限制的反射API导致,可在启动命令中添加JVM参数允许特定反射访问:
sudo java --add-opens java.base/java.lang=ALL-UNNAMED -jar launcher.jar
若需长期生效,可修改ThinkOrSwim的启动脚本,将上述参数加入默认启动命令。
2. 修复JAVA_HOME环境变量
修改/etc/environment后,执行以下命令使变量立即生效:
source /etc/environment
若希望配置永久生效,可在用户的~/.bashrc或~/.profile文件中添加:
export JAVA_HOME="/usr/lib/jvm/zulu11/" export PATH="$JAVA_HOME/bin:$PATH"
添加后执行source ~/.bashrc(或对应配置文件)激活设置。
3. 在update-alternatives中添加其他Zulu11版本
使用以下命令将未被识别的Zulu11版本加入update-alternatives:
添加zulu-11-amd64
# 添加java命令 sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/zulu-11-amd64/bin/java 2115802 # 若需配置javac,执行此命令 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/zulu-11-amd64/bin/javac 2115802
添加zulu11-ca-amd64
# 添加java命令 sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/zulu11-ca-amd64/bin/java 2115803 # 若需配置javac,执行此命令 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/zulu11-ca-amd64/bin/javac 2115803
添加完成后,执行sudo update-alternatives --config java即可选择这些版本作为默认Java。
官方文档参考
ThinkOrSwim桌面版要求使用Azul Zulu OpenJDK 11版本运行。若系统安装其他Java版本,可能导致启动失败或功能异常,请确保系统默认Java版本为Zulu OpenJDK 11,并正确配置JAVA_HOME环境变量指向该版本的安装目录。
内容的提问来源于stack exchange,提问作者boo lean - Go FAT
相关产品推荐
相关产品推荐

