当前位置: 首页 > 知识库问答 >
问题:

Java7Update25使我们的JavaWebStart应用程序在没有日志记录的情况下失败

蒋何平
2023-03-14

由于Oracle发布了Java7Update25,我们的应用程序不再运行。

最初我们得到了一些关于代码库的警告

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

#### 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 D直接从cli运行应用程序时esktop.jar应用程序将运行文件,所以这个问题显然与java web start中的更改有关。

该错误显然与7u25中的权限更改有关,因为com.sun.jnlp.JNLPClassLoader.get权限中出现NullPointerExc0019。

只是为了解释我认为会发生什么(我是Wout的同事):桌面。Main实例化桌面。DesktopProxySelector(我们的类),桌面。DesktopProxySelector实例化desktop.configuration.CentralConfigurationServicedesktop.configuration.CentralConfigurationService实例化java.net.URI。

在DesktopProxySelector初始化CentralConfigurationService的第一行,由JNLPClassLoader调用的getPerments方法抛出NullPointerExcure。因此,当通过java webstart加载CentralConfigurationService类并获取该类的权限时,出现了问题。这是否与URI类被实例化的事实有关,这需要额外的权限(到远程uri的连接被设置)?

共有1个答案

邹麻雀
2023-03-14

最终问题解决了。问题是由主清单中包含的jar文件不匹配引起的。MF文件与发布中提到的jar文件。jnlp。

很明显,现在需要在发布中包含所有将要使用的jar文件。jnlp文件。

(过去决定将此文件手动保存在sink中,这显然不是始终以支持的方式进行维护。现在此过程是自动化的,因此此问题不应再发生在我们身上。)

 类似资料:
  • 问题内容: 自Oracle启动Java 7 Update 25以来,我们的应用程序不再起作用。 最初,我们收到了一些有关Manifest文件中缺少代码库和安全性标签的警告,我们已对其进行了修复。 我们现在遇到的问题是,在控制台中,我们仅获得以下几行: 我们还会收到带有错误消息的应用程序错误对话框: 无法启动应用程序 。 详细信息按钮在例外中提供以下详细信息: 相关代码部分为: (最后一行是行号13

  • 问题内容: 我只是在一个旧应用程序上工作,该应用程序的日志不好或没有日志。它没有实现Spring框架。 没有Spring,是否可以实现AspectJ日志记录功能? 如果是,请给我建议一些好的教程。 问题答案: 尝试使用此链接获取一个简单的应用程序,该应用程序显示如何使用加载时间编织而不使用Spring http://ganeshghag.blogspot.in/2012/10/demystifyi

  • 我按照教程在我的express应用程序中设置winston(2.x)默认记录器。当更新到当前版本的winston(3.0.0)时,我在添加传输时遇到了问题。我已经跟踪了最新的文档,但仍然在控制台中得到通知,并且根本没有创建日志文件: 我做错了什么?

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

  • 我是Quarkus新手,正在使用Eclipse和Quarkus插件。 无论我是手动使用启动还是使用Eclipse夸克启动配置,应用程序似乎总是在运行测试。 我看到了类似的东西 有一段时间什么都没发生,直到我看到Quarkus标志、我的日志消息等。 也许我还没有仔细阅读文档,但我发现没有配置来关闭它并直接在开发模式下启动应用程序。 有人能帮我吗?

  • 问题内容: 我想要一种简单的,最好是基于注释的方式,将外部属性注入到Java程序中,而无需使用spring框架() SomeClass.java application.yml 在标准库中是否有建议的方法? 问题答案: 我最终使用apache commons配置: pom.xml: src /…/ PropertiesLoader.java /src/main/resources/applicat