1

我们必须使用 JWS 在 Internet 上提供 Java 应用程序演示。进展顺利;缺少的只是使工作目录文件可用于应用程序。

我们知道 getResource() 方式......问题是我们为同一个应用程序有不同的插件,每个插件都需要在其工作目录中的不同文件(通常是相同文件的不同版本)才能正常工作。因此,当我们希望应用程序具有不同的行为时,我们只需更改工作目录即可。

目前,该演示被打包在一个签名的 jar 文件中,并且它可以正确加载,直到它需要来自工作目录的文件。显然,这个演示的互联网用户并没有准备好文件。我们需要一种方法使 WebStart 应用程序可以在其工作目录中使用这些文件(读/写访问权限)。

我们已经想到了一些事情,比如让应用程序在启动时自行下载文件,或者将它们打包到 jar 中并在启动时提取它们。

寻找建议和/或新想法。我会继续努力……如果我找到可靠的东西,我会更新。

非常感谢!

4

2 回答 2

1

我说我会分享我在研究中发现的适合我需要的东西。这是我到目前为止所拥有的。

我发现当前工作目录 (CWD) 的概念在 Java Web Start (JWS) 应用程序的上下文中并不真正有意义。这导致我停止尝试查找 JWS 的 CWD 并开始寻找其他选项。

我发现(不,我不知道)您可以通过简单地在其名称前添加一个“/”来引用(使用 getResource())JAR 文件根目录中的文件。(例如,“/log4j.properties”。)这样做的影响是我现在可以在该 JAR 文件的根目录中获取仅以只读方式引用的任何文件(实际上只是一个 ZIP 文件)。您可以使用 AnyClass.class.getResourceAsStream 引用 JAR 文件根目录中的任何文件。这排除了运行应用程序所需的只读文件的问题,代价是代码中的开关告诉应用程序是从有效的 CWD 还是从 JWS 上下文运行。(您可以非常简单地在 JWS 应用程序的 JNLP 文件中设置一个属性,并检查该属性是否已设置或不知道在哪里查找该文件。)

对于只写文件(在我的例子中是日志文件),我使用了属性,添加了一个带有应用程序名称的目录:<user.home>/.appname 并向其中添加了日志文件。

读/写文件(在我的情况下没有)可能会与只写文件放在同一个地方。如果需要,该软件可以处理将它们上传到某个地方,一旦修改,我猜。

这就是我现在处理问题的方式。

于 2010-09-06T00:17:30.183 回答
0

请注意,您可以明确要求一项服务,以获取对计算机的文件访问权限(除非您一直要求完全访问权限(这需要签名的 jar 文件))。

然后你需要确定这些文件需要去哪里——基本上你不知道什么在哪里以及你是否真的可以在任何地方写。您可以创建 tmp 文件,但这些文件会消失。

与 JNLP 服务器对话的文件系统抽象是否可以将用户数据存储在服务器上?

于 2010-08-25T21:56:13.393 回答