运行 Java Webstart 时,有没有办法更改 JVM 的工作目录?当我使用 system.setProperties("user.dir", newDir) 它设置它(system.getProperties() 显示它确实)但忽略它。
这是 Java Webstart 中始终使用我启动 jnlp 文件的工作目录的限制吗?我正在使用 jnlp 文件中的所有权限。
请帮忙!
编辑:无论我现在做什么,我的 webstart 总是使用 user.dir 来保存文件。令人沮丧!
运行 Java Webstart 时,有没有办法更改 JVM 的工作目录?当我使用 system.setProperties("user.dir", newDir) 它设置它(system.getProperties() 显示它确实)但忽略它。
这是 Java Webstart 中始终使用我启动 jnlp 文件的工作目录的限制吗?我正在使用 jnlp 文件中的所有权限。
请帮忙!
编辑:无论我现在做什么,我的 webstart 总是使用 user.dir 来保存文件。令人沮丧!
我自己过去也有过这个问题,但我总是发现,最后,我不需要它。我为什么这么说?
因为您的 java web start 应用程序不像从Program Files
. 它甚至不像大多数程序那样存在于您的计算机上(它被分解成一堆不同的文件并由 JVM 重新组装)。因此,你不能说程序有自己的目录来做它需要的事情。
但它不需要。原因如下:
Preferences
API 。API的底层运作与Preferences
JWS 一样神秘,因此它们非常适合。无论哪种方式,如果您需要将内容写入文件,您应该检查此 API 以查看它是否可以满足您的需求。user.home
按照@AndrewThompson 的建议使用资源创建一个程序目录。Program Files
这将是“您的”目录,并且与(例如,如果您在 Windows 上运行)中的目录一样好(实际上,更好)。总之,在所有情况下(我遇到过),都没有必要更改您当前的工作目录。如果您需要自己的文件夹,请在其中创建一个user.home
(因为您不会在那里遇到文件权限问题)。
..我使用的所有设置文件都是在 user.dir 中创建的。
有错误。将它们放在&的子目录中user.home
,问题就解决了。
在假设你真的需要转移user.dir
Java WebStart 执行的属性,这是我发现的唯一选择:设置这个系统环境变量(所以系统范围):
_JAVA_OPTIONS="-Duser.dir=C:\Temp"
但是请注意,此选项会被读取并应用于任何 JVM 执行。
为什么在我的上下文中需要它?因为 Java WebStart ClassLoader 在从缓存中的 jar 文件中获取之前在用户配置文件中寻找任何单个资源(类、属性...)。由于用户配置文件已移至网络存储,应用程序启动变得非常缓慢。我仍在调查 Java 资源以了解(并避免)这种行为。因此,我的应用程序无需设置即可完美运行,user.dir
但这是我们目前遇到的性能问题的唯一解决方法。
传递运行时参数或用户特定设置的推荐方法是通过 jnlp 参数
<application-desc main-class=".....">
<argument>user.home</argument>
..............