相关疑难解决方法(0)

通过Java Webstart运行时,invokeLater中出现NullPointerException

从JRE 1.7.0_21升级到1.7.0_25-b15后,我的应用程序在从Java WebStart运行时开始在SwingUtilities.invokeLater(...)中抛出NullPointerException.令人惊讶的是,当它作为一个独立的应用程序(在JWS之外)执行时,它运行良好.

这是堆栈的顶部:

Exception in thread "AWT-EventQueue-2" java.lang.NullPointerException
at sun.awt.SunToolkit.getSystemEventQueueImplPP(SunToolkit.java:1011)
at sun.awt.SunToolkit.getSystemEventQueueImplPP(SunToolkit.java:1007)
at sun.awt.SunToolkit.getSystemEventQueueImpl(SunToolkit.java:1002)
at java.awt.Toolkit.getEventQueue(Toolkit.java:1730)
at java.awt.EventQueue.invokeLater(EventQueue.java:1217)
at javax.swing.SwingUtilities.invokeLater(SwingUtilities.java:1290)
at AppletView$8.setBaseUnits(AppletView.java:536)
    (...)
Run Code Online (Sandbox Code Playgroud)

为了全面了解:方法setBaseUnits(..)被远程服务器从RMI调用为回调.完整的堆栈跟踪很长.

安全模型中是否有某些内容在RMI或JWS中发生了变化,可能会破坏事物?如果是这样,我会期待一些安全性异常,但它可能是在JRE中未正确检测到的并导致NPE.

任何建议表示赞赏.


----更新1 :

JRE 1.7.0_25更新可能存在类似的问题,可能涉及一些安全更改和AppContext对象:https : //forums.oracle.com/message/11080621 https://forums.oracle.com/thread/2552799.我尝试过建议修复:https://forums.oracle.com/message/11082162#11082162但没有任何成功.

我可以在我的应用程序中看到3个AWT-EventQueue线程,数字从0到2.看起来如果JWS启动程序,JRE会为不同的应用程序上下文创建额外的事件队列.JWS中有3个AppContext和3个EVT,如果从IDE执行程序,则只有一个上下文和EVT.


----更新2 :

下面的guruman建议有一个解决方法(非常感谢).不幸的是,SwingUtilities.invokeLater(..)必须替换对来自RMI线程的所有调用,并且程序开始依赖于Sun JRE内部API.

我仍然在寻找更具体的方法,而不是针对Sun JRE.我认为这是一个JRE错误.也许它可以以某种方式修补:在RMI线程中AppContext不应为null.


----更新3:

我做了一个简单的测试用例来说明问题.它包含4个文件.要运行此测试用例,需要签署目标jar(TestCase.jar).首先在launch.jnlp中指定正确的代码库,然后通过Java Web Start运行服务器(例如,使用javaws launch.jnlp).屏幕上应显示以下框架:

启动后的服务器应用程序框架

然后可以执行RMI客户端.成功执行后,框架应包括:

成功进行RMI调用后的服务器应用程序框架

但是如果您尝试使用JWS执行服务器您将在客户端程序中获得以下异常(异常从RMI服务器传播到RMI客户端):

Exception in thread "main" java.lang.NullPointerException
    at sun.awt.SunToolkit.getSystemEventQueueImplPP(SunToolkit.java:1011)
    at sun.awt.SunToolkit.getSystemEventQueueImplPP(SunToolkit.java:1007)
    at sun.awt.SunToolkit.getSystemEventQueueImpl(SunToolkit.java:1002)
    at java.awt.Toolkit.getEventQueue(Toolkit.java:1730)
    at java.awt.EventQueue.invokeLater(EventQueue.java:1217)
    at javax.swing.SwingUtilities.invokeLater(SwingUtilities.java:1290)
    at testcase.RmiServiceImpl.callBack(RmiServiceImpl.java:70)
    at …
Run Code Online (Sandbox Code Playgroud)

java swing rmi java-web-start

17
推荐指数
2
解决办法
8529
查看次数

Java 7更新25使我们的java Web启动应用程序失败,没有记录

自从Oracle推出的java 7更新25以来,我们的应用程序不再起作用.

最初,我们收到了一些关于Manifest文件中缺少的代码库和服务标签的警告,我们修复了该文件.

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

#### Java Web Start Error:
#### null
Run Code Online (Sandbox Code Playgroud)

我们还得到一个应用程序错误对话框,其中包含以下消息:无法启动应用程序.

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

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)
Run Code Online (Sandbox Code Playgroud)

相关的代码部分是:

Desktop.Main.main …
Run Code Online (Sandbox Code Playgroud)

java exception java-web-start web

13
推荐指数
1
解决办法
8664
查看次数

标签 统计

java ×2

java-web-start ×2

exception ×1

rmi ×1

swing ×1

web ×1