当前位置: 首页 > 面试题库 >

Java 7 update 25使我们的Java Web Start应用程序失败且没有日志记录

杨腾
2023-03-14
问题内容

自Oracle启动Java 7 Update 25以来,我们的应用程序不再起作用。

最初,我们收到了一些有关Manifest文件中缺少代码库和安全性标签的警告,我们已对其进行了修复。

我们现在遇到的问题是,在控制台中,我们仅获得以下几行:

#### Java Web Start Error:
#### null

我们还会收到带有错误消息的应用程序错误对话框: 无法启动应用程序

详细信息按钮在例外中提供以下详细信息:

java.lang.NullPointerException
    at com.sun.jnlp.JNLPClassLoader.getPermissions(Unknown Source)
    at java.security.SecureClassLoader.getProtectionDomain(SecureClassLoader.java:206)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at desktop.DesktopProxySelector.<init>(DesktopProxySelector.java:24)     <- code smippet below
    at desktop.Main.main(Main.java:139)                                      <- code smippet below
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.sun.javaws.Launcher.executeApplication(Unknown Source)
    at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
    at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
    at com.sun.javaws.Launcher.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:724)

相关代码部分为:

Desktop.Main.main

/**
 * Main method, starts the application
 */
public static void main(String[] args) {
    System.setProperty("java.net.useSystemProxies", "true");

    //Logger.getLogger("httpclient.wire.header.level").setLevel(Level.FINEST);
    //Logger.getLogger("org.apache.commons.httpclient.level").setLevel(Level.FINEST);
    java.net.ProxySelector.setDefault(new DesktopProxySelector(java.net.ProxySelector.getDefault()));

(最后一行是行号139)

desktop.DesktopProxySelector:

public class DesktopProxySelector extends ProxySelector {

    public  DesktopProxySelector(ProxySelector defaultSelector) {
    URI httpsUri = new CentralConfigurationService().getCentralLocation();

(最后一行是发生异常的第24行)

有人可以给我们一些线索提示(或更好的解决方案)来说明由此“次要”更新引起的Java新行为。

当我们使用java -jar Desktop.jar从cli直接运行该应用程序时,该应用程序将运行文件,因此该问题显然与Java Web
Start中的更改有关。

@trashgod:该错误显然与7u25中的Permissions更改有关,因为NullPointerException发生在com.sun.jnlp.JNLPClassLoader.getPermissions中。

只是为了解释我的想法(我是Wouter的同事):desktop.Main实例化一个desktop.DesktopProxySelector(我们的类),desktop.DesktopProxySelector实例化desktop.configuration.CentralConfigurationService
desktop.configuration.CentralConfigurationService实例化一个java.net.URI 。

在实例化CentralConfigurationService的DesktopProxySelector初始化的第一行,由JNLPClassLoader调用的getPermissions方法抛出NullPointerException。因此,通过java
webstart加载CentralConfigurationService类并获得该类的权限时出了点问题。可能与URI类实例化(这需要额外的权限(已建立到远程uri的连接))有关吗?


问题答案:

最终问题解决了。该问题是由于MANIFEST.MF主文件中包含的jar文件与launch.jnlp中提到的jar文件之间的不匹配引起的。

显然,现在要求所有将要使用的jar文件也必须存在于launch.jnlp文件中。

(过去决定手动将此文件保存在接收器中,显然,该文件并不总是以适当的方式进行维护。现在,此过程是自动化的,因此问题不再发生在我们身上。)



 类似资料:
  • 由于Oracle发布了Java7Update25,我们的应用程序不再运行。 最初我们得到了一些关于代码库的警告 我们现在遇到的问题是,在控制台中,我们只得到以下行: 我们还会得到一个应用程序错误对话框,其中包含消息:无法启动应用程序。 “详细信息”按钮在异常中提供以下详细信息: 相关代码部分包括: (最后一行是第139行) (最后一行是发生异常的第24行) 有人能给我们一些提示(或者更好的解决方案

  • 需要帮助...我在这里做错了什么???我相信它确实从应用程序属性文件中读取路径和文件名。但我不认为它读取了logback.xml或logback-spring.xml 我做了一些研究,发现了许多问题/答案。但是我想每个人都说要把logback xml放在资源中,把路径和文件名放在application.properties.我知道这很简单,但是在某个地方遗漏了一些东西… 提前谢谢!! 应用程序属性

  • 我有一个标准的Spring Boot微服务,它使用Log4j2进行所有日志记录。 我想优雅地关闭spring boot应用程序,以防日志记录失败(例如磁盘已满)。有办法设置吗?

  • 我们如何区分哪个日志来自哪个应用程序,是否想把所有日志混在一个地方? 我们有一个现有的应用程序,并且在整个应用程序中有几个log语句,这就是我们选择Log4Net appender来了解应用程序的原因。

  • 本文向大家介绍Powershell使用WINDOWS事件日志记录程序日志,包括了Powershell使用WINDOWS事件日志记录程序日志的使用技巧和注意事项,需要的朋友参考一下 通常,人们使用基于文件的日志。这样做没有什么问题,但是使用WINDOWS提供系统内部日志会更加简单。 如果你有管理权限,你可以随时创建一个新的日志: 该命令创造了一个名为Mylog的日志,这个事件源自”JobDUE”,”