3

新しい乱数生成アルゴリズムの 1 つを使用しています ( https://openjdk.java.net/jeps/356 ):

RandomGeneratorFactory.of("L128X1024MixRandom").create().nextDouble();

そして、それは機能します。jpackage ツール ( https://openjdk.java.net/jeps/392 )を使用した後を除く

例外が発生します

乱数生成アルゴリズム「L128X1024MixRandom」の実装は利用できません

usesmodule-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 ディレクトリからコマンドを実行します

--type dmg(macOS の場合。他のプラットフォームでは変更が必要です。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
4

1 に答える 1