Java 更改AppData路径(系统属性)
我正在为Minecraft游戏开发一个发射器,我想做的是为游戏设置APPDATA(windows)位置。该值并没有真正更改,但已针对执行代码的程序进行了修改。例如,在Mac OS X或Linux系统上,通过使用Java 更改AppData路径(系统属性),java,appdata,Java,Appdata,我正在为Minecraft游戏开发一个发射器,我想做的是为游戏设置APPDATA(windows)位置。该值并没有真正更改,但已针对执行代码的程序进行了修改。例如,在Mac OS X或Linux系统上,通过使用System.setProperty(“user.home”,dir)更改“home”文件夹位置,很容易实现这一点但如何在windows上使用APPDATA文件夹实现这一点 可以使用这样的批处理脚本修改此位置应用数据=%CD%\minecraft 程序/启动器是使用swing编程的,不是基
System.setProperty(“user.home”,dir)更改“home”文件夹位置,很容易实现这一点代码>但如何在windows上使用APPDATA文件夹实现这一点
可以使用这样的批处理脚本修改此位置<代码>应用数据=%CD%\minecraft
程序/启动器是使用swing编程的,不是基于控制台的。您可以试试这个
Runtime.getRuntime().exec("cmd /c SET APPDATA=%CD%\minecraft");
您可以更改生成的任何子进程的APPDATA。使用ProcessBuilder。为当前进程更改它是可能的,尽管很困难(使用JNI)。见这一相关问题:
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小程序设置它。请看这个相关的问题:谢谢,我将对此进行辩护。你的答案看起来很完美,我将尽快尝试进行研究。