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