1

运行 Java Webstart 时,有没有办法更改 JVM 的工作目录?当我使用 system.setProperties("user.dir", newDir) 它设置它(system.getProperties() 显示它确实)但忽略它。

这是 Java Webstart 中始终使用我启动 jnlp 文件的工作目录的限制吗?我正在使用 jnlp 文件中的所有权限。

请帮忙!

编辑:无论我现在做什么,我的 webstart 总是使用 user.dir 来保存文件。令人沮丧!

4

4 回答 4

4

我自己过去也有过这个问题,但我总是发现,最后,我不需要它。我为什么这么说?

因为您的 java web start 应用程序不像从Program Files. 它甚至不像大多数程序那样存在于您的计算机上(它被分解成一堆不同的文件并由 JVM 重新组装)。因此,你不能说程序有自己的目录来做它需要的事情。

但它不需要。原因如下:

  1. 当您需要存储数据时,Java 有提供帮助的PreferencesAPI 。API的底层运作与PreferencesJWS 一样神秘,因此它们非常适合。无论哪种方式,如果您需要将内容写入文件,您应该检查此 API 以查看它是否可以满足您的需求。
  2. 如果您需要为用户写入文件,那么提示他们并允许他们选择位置显然意味着您不会使用当前工作目录来读取/写入文件。
  3. 如果您需要序列化对象,您应该user.home按照@AndrewThompson 的建议使用资源创建一个程序目录。Program Files这将是“您的”目录,并且与(例如,如果您在 Windows 上运行)中的目录一样好(实际上,更好)。

总之,在所有情况下(我遇到过),都没有必要更改您当前的工作目录。如果您需要自己的文件夹,请在其中创建一个user.home(因为您不会在那里遇到文件权限问题)。

于 2013-11-02T11:28:56.257 回答
2

..我使用的所有设置文件都是在 user.dir 中创建的。

有错误。将它们放在&的子目录中user.home,问题就解决了。

于 2013-10-31T22:57:07.480 回答
0

在假设你真的需要转移user.dirJava WebStart 执行的属性,这是我发现的唯一选择:设置这个系统环境变量(所以系统范围):

_JAVA_OPTIONS="-Duser.dir=C:\Temp"

但是请注意,此选项会被读取并应用于任何 JVM 执行。

为什么在我的上下文中需要它?因为 Java WebStart ClassLoader 在从缓存中的 jar 文件中获取之前在用户配置文件中寻找任何单个资源(类、属性...)。由于用户配置文件已移至网络存储,应用程序启动变得非常缓慢。我仍在调查 Java 资源以了解(并避免)这种行为。因此,我的应用程序无需设置即可完美运行,user.dir但这是我们目前遇到的性能问题的唯一解决方法。

于 2014-11-13T07:23:50.900 回答
-1

传递运行时参数或用户特定设置的推荐方法是通过 jnlp 参数

<application-desc main-class=".....">
   <argument>user.home</argument>
   ..............
于 2013-10-31T23:49:25.737 回答