我正在使用一种新的随机生成器算法(https://openjdk.java.net/jeps/356):
RandomGeneratorFactory.of("L128X1024MixRandom").create().nextDouble();
它有效。使用 jpackage 工具后除外(https://openjdk.java.net/jeps/392)
我得到异常
没有可用的随机生成器算法“L128X1024MixRandom”的实现
我尝试uses
在我的 module-info.java (https://docs.oracle.com/javase/specs/jls/se17/html/jls-7.html#jls-7.7.3)中添加指令以指定使用该服务
uses java.util.random.RandomGenerator;
但这并不能解决它或似乎在那里很重要(我用错了吗?我认为这应该是解决方案)。
相反,我必须添加 jpackage 选项:
--add-modules jdk.random
复制步骤
1. 用文件创建目录:
rngTest/com/example/Test.java
package com.example;
import javax.swing.JOptionPane;
import java.util.random.RandomGeneratorFactory;
public class Test {
public static void main(String[] args) throws Exception {
try {
JOptionPane.showMessageDialog(null, "nextDouble: " + RandomGeneratorFactory.of("L128X1024MixRandom").create().nextDouble());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Exception: " + e.getMessage());
}
}
}
rngTest/module-info.java
module com.example {
requires java.desktop;
uses java.util.random.RandomGenerator;
}
rngTest/manifest.txt
Manifest-Version: 1.0
Created-By: 17.0.1
Build-Jdk-Spec: 17
Main-Class: com.example.Test
2.从rngTest目录运行命令
(对于 macOS。需要--type dmg
针对其他平台进行更改,请参阅https://openjdk.java.net/jeps/392)
find . -name "*.java" > sources.txt
javac @sources.txt -d target
mkdir -p lib; cd target; jar cfm ../lib/test.jar ../manifest.txt *; cd ..
${JAVA_HOME}/bin/jpackage --module-path lib --module com.example/com.example.Test --type dmg --name Test
3.运行创建的安装程序,然后运行安装的应用程序
注意异常消息。
现在重新运行 jpackage 命令,--add-modules jdk.random
然后重复步骤 3,注意成功。
${JAVA_HOME}/bin/jpackage --module-path lib --module com.example/com.example.Test --type dmg --name Test --add-modules jdk.random