Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改AppData路径(系统属性)_Java_Appdata - Fatal编程技术网

Java 更改AppData路径(系统属性)

Java 更改AppData路径(系统属性),java,appdata,Java,Appdata,我正在为Minecraft游戏开发一个发射器,我想做的是为游戏设置APPDATA(windows)位置。该值并没有真正更改,但已针对执行代码的程序进行了修改。例如,在Mac OS X或Linux系统上,通过使用System.setProperty(“user.home”,dir)更改“home”文件夹位置,很容易实现这一点但如何在windows上使用APPDATA文件夹实现这一点 可以使用这样的批处理脚本修改此位置应用数据=%CD%\minecraft 程序/启动器是使用swing编程的,不是基

我正在为Minecraft游戏开发一个发射器,我想做的是为游戏设置APPDATA(windows)位置。该值并没有真正更改,但已针对执行代码的程序进行了修改。例如,在Mac OS X或Linux系统上,通过使用
System.setProperty(“user.home”,dir)更改“home”文件夹位置,很容易实现这一点但如何在windows上使用APPDATA文件夹实现这一点

可以使用这样的批处理脚本修改此位置<代码>应用数据=%CD%\minecraft

程序/启动器是使用swing编程的,不是基于控制台的。

您可以试试这个

Runtime.getRuntime().exec("cmd /c SET APPDATA=%CD%\minecraft");

您可以更改生成的任何子进程的APPDATA。使用ProcessBuilder。为当前进程更改它是可能的,尽管很困难(使用JNI)。见这一相关问题:

  • APPDATA是一个windows环境变量
  • 搜索中过去的答案:“java set环境变量”:




  • 试图通过强制执行本机命令来更改当前进程的环境变量,
    Runtime.getRuntime().exec(“…”
    )将无法工作,因为它在单独的进程中执行命令-环境更改将仅应用于该进程内。此外,System.getEnv()使用缓存结果,因此当前java程序很可能看不到更改

  • 更具体地说,为您:

    • 你的启动器是一个swing应用程序
    • 您的游戏是一款swing应用程序,带有运行游戏的框架
    • 我假设这是两个独立的应用程序,您的启动器应用程序启动一个运行游戏应用程序的新进程

    • 如果这是真的:

      • 创建一个
        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可以控制它产生的新进程的环境变量
      • 如果您必须将两个应用程序合并为一个,并在launcher应用程序中运行游戏,则需要在启动launcher应用程序之前为其设置环境。使用命令行或批处理脚本启动启动器

  • 对不起,这是不可能的。我想在我创建的游戏发射器中使用它(具体来说,是Minecraft发射器)。启动器本身会创建一个框架来运行游戏小程序,因此它不是一个运行外部文件的程序。遗憾的是,我不认为可以使用这个命令。不过还是谢谢你的帮助。我想你应该试试这个,因为它会设置windows变量。哦,我明白了,对不起。我以为这只会改变一个程序。关键是,这个集合是全局变量,我希望它只为一个java小程序设置它。请看这个相关的问题:谢谢,我将对此进行辩护。你的答案看起来很完美,我将尽快尝试进行研究。