我们目前有一个 Java 应用程序,可以部署在客户端上或作为服务器的快捷方式运行。从服务器运行 JAR 时,我们间歇性地收到 ClassNotFound 异常,这看起来像是 Windows 断开了网络连接,仅加载了 JAR 中的部分类(用户打开了不同的屏幕,然后问题就很明显)。
我目前正在研究 Web Start 技术,以允许我们运行单个快捷方式。
但是,应用程序有多个文件夹,需要位于启动 JAR 的同一文件夹中(用于配置、日志等)。这些文件夹将需要所有用户的完全访问权限才能允许他们写入日志文件。配置文件夹层次结构下有很多配置文件。
该应用程序还需要访问环境用户设置(例如获取其用户文件夹)。它还需要某些命令行参数(包括使用哪个文件夹进行配置、日志文件位置、java内存使用情况等)
编辑
该应用程序还包含对 2 个签名 JAR 的引用。这些是:
- jh.jar
- 邮件.jar
看起来这些是由 SUN Microsystems 签署的。 jh 用于我们应用程序中的帮助集成,而 mail 用于电子邮件集成。
我现在已经从 java2s.com 下载了这些文件的最新版本,但没有签名的等效版本。
结束编辑
该应用程序是在 Netbeans 中开发的,它编译单个 JAR 文件并将依赖的 JAR 复制到 dist/lib 文件夹。我在 Netbeans 中为应用程序启用了 Web Start 功能,它生成了 JNLP 文件。
请记住,Web Start 是此类应用程序的最佳选择吗? 可以在 Web Start 部署中包含文件夹吗?我在 JNLP 文件的 XML 结构中找不到任何可以执行此操作的内容。
干杯,
安德兹
最佳答案
是的,您可以使用 WebStart 来实现此目的。
权限: 如果您需要文件系统的权限,则必须签署您的 jar 并将 all-permissions在你的 jnlp.tag 中
参数: 可以使用 application_desc 中的参数元素来提供参数。 。
文件夹: 我不认为您可以在 WebStart 应用程序中包含文件夹,但您可以将配置文件放入 jar 中并从那里读取它们,或者在启动时提取它们。
ClassNotFoundError:
We have intermittently received ClassNotFound exceptions when running the JAR from the server which looks like Windows dropping the network connection with only part of the classes from the JAR loaded
对我来说听起来不太合理。默认情况下,所有 jar 都将在应用程序启动之前下载。如果你将“download”设置为“lazy”,则jar会在第一次需要时下载,但我猜它会在那时完全下载。
关于Java Web Start 和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5417185/