2

私は Minecraft ゲームのランチャーに取り組んでいます。やりたいことは、ゲームの APPDATA (windows) の場所を設定することです。値は実際には変更されませんが、コードを実行したプログラム用に変更されます。たとえば、Mac OS X または Linux システムで「ホーム」フォルダの場所を変更することでこれを実現するのは非常に簡単System.setProperty("user.home", dir);ですが、Windows で APPDATA フォルダを使用してこれを実現するにはどうすればよいでしょうか?

この場所の変更は、次のようなバッチ スクリプトを使用して可能です。APPDATA=%CD%\minecraft.

プログラム/ランチャーは、swing を使用してプログラムされており、コンソール ベースではありません。

4

3 に答える 3

2
  1. APPDATA は Windows 環境変数です
  2. 検索からの過去の回答: "java set environment variable":

    Javaで環境変数を追加するには?
    Java の ProcessBuilder 環境変数
    Java から環境変数を設定するにはどうすればよいですか?
    実行時にJavaから環境変数を設定することは可能ですか?

  3. ブルート フォース ネイティブ コマンドの実行によって現在のプロセスの環境変数を変更しようとしてもRuntime.getRuntime().exec("...")、 は機能しません。別のプロセスでコマンドを実行するためです。環境の変更はそのプロセス内でのみ適用されます。その上、 System.getEnv() はキャッシュされた結果を使用するため、現在の Java プログラムはおそらく変更を認識しません。

  4. より具体的には:

    • あなたのランチャーはスイングアプリです
    • あなたのゲームは、ゲームを実行するためのフレームを備えたスイングアプリです
    • これらは 2 つの別個のアプリであり、ランチャー アプリはゲーム アプリを実行 する新しいプロセスを開始する仮定します。

    • これが当てはまる場合:

      • ProcessBuilderゲーム プロセスを起動するインスタンスを作成します。

        String javaHome = System.getProperty("java.home");
        String javaBin = javaHome +
                File.separator + "bin" +
               File.separator + "java";
        String classpath = System.getProperty("java.class.path");
        
        ProcessBuilder builder = new ProcessBuilder(
                javaBin, "-cp", classpath, "com.example.MinecraftGame");
        
      • ゲームの環境変数を設定します。

        Map<String, String> env = pb.environment();
        env.put("APPDATA", "%CD%\minecraft");
        
      • ゲームを実行します:

        Process process = builder.start();
        process.waitFor();
        return process.exitValue();
        
    • これが真実でない場合:

      • Java は、それが生成する新しいプロセスの環境変数を制御できるため、おそらくそうあるべきです。
      • 2 つのアプリを 1 つに結合し、ランチャー アプリ内でゲームを実行する必要がある場合は、起動する前にランチャー アプリの環境を設定する必要があります。コマンド ラインまたはランチャーを起動するバッチ スクリプトを使用します。
于 2013-07-04T03:53:34.300 に答える