我正在为Minecraft游戏开发一个启动器,我想要做的是为游戏设置APPDATA(windows)位置。该值并未真正更改,但已针对执行代码的程序进行了修改。例如,通过使用System.setProperty("user.home", dir);
更改“主页”文件夹位置,在Mac OS X或Linux系统上实现此功能非常容易,但如何使用Windows上的APPDATA文件夹实现此目的?
使用批处理脚本可以修改此位置; APPDATA=%CD%\minecraft
。
程序/启动器使用swing进行编程,而不是基于控制台。
答案 0 :(得分:2)
你可以试试这个
Runtime.getRuntime().exec("cmd /c SET APPDATA=%CD%\minecraft");
答案 1 :(得分:2)
您可以为您生成的任何子进程更改APPDATA。使用ProcessBuilder。虽然很难,但是可以为当前流程更改它(使用JNI)。请参阅此相关问题:Is it possible to set an environment variable at runtime from Java?
答案 2 :(得分:2)
搜索过去的答案:“java set environment variable”:
How to add an environment variable in Java?
ProcessBuilder environment variable in java
How do I set environment variables from Java?
Is it possible to set an environment variable at runtime from Java?
尝试通过强力本机命令执行来更改当前进程的环境变量 Runtime.getRuntime().exec("...")
将无法正常工作 ,因为它在单独的进程中执行命令 - 环境更改仅适用于该进程。此外,System.getEnv()使用缓存结果,因此当前的Java程序很可能看不到更改。
更具体地适合您:
我假设这些是两个单独的应用,而您的启动器应用启动了一个运行游戏应用的新流程。
如果是这样的话:
创建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();
如果不是这样的话: