FULL PRODUCT VERSION :
java version " 1.7.0_25 "
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux cawcdhplnx016.nss.vzwnet.com 2.6.32-220.4.2.el6.x86_64 #1 SMP Mon Feb 6 16:39:28 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
Windows: Version 6.1.7601
A DESCRIPTION OF THE PROBLEM :
On both Linux and Windows running 7u25, webstart applications that use RMI with SwingUtlities.invokeLater throw a NPE.
If started from the command line, the program works fine -- only fails if started via web start.
Earlier JRE versions work fine.
Fails on both Linux and Windows.
See the full stack trace below.
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)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See sample code below.
-Compile MainServer and Message into a jar (in this case RmiTest.jar) and place on web server.
-Launch via the attached JNLP file.
-From the command line or IDE, run MainClient
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The JLabel text will update successfully.
ACTUAL -
The 'MainClint' will throw a NPE every time.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
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 MainServer.sayHello(MainServer.java:41)
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 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
at $Proxy0.sayHello(Unknown Source)
at MainClient.doTest(MainClient.java:18)
at MainClient.main(MainClient.java:28)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
MainServer.java:
public class MainServer extends UnicastRemoteObject implements Message {
private void startServer(){
try {
// create on port 1099
Registry registry = LocateRegistry.createRegistry(1099);
// create a new service named myMessage
registry.rebind( " myMessage " , this);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println( " system is ready " );
}
public static void main(String[] args) throws Exception {
final MainServer mMain = new MainServer();
mMain.startServer();
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
mMain.createAndShowGUI();
System.out.println( " Main: " + this);
}
});}
public MainServer() throws RemoteException {
}
@Override
public void sayHello(final String name) throws RemoteException {
final String mText = " hello " +name;
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
iLabel.setText(mText);
iFrame.pack();
}
});
System.out.println( " Text: " + mText + " , " + this);
}
JLabel iLabel;
JFrame iFrame;
JPanel iPanel;
void createAndShowGUI() {
//Create and set up the window.
iFrame = new JFrame( " rmi test " );
iFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
iPanel = new JPanel();
iFrame.add(iPanel);
//Add the ubiquitous " Hello World " label.
iLabel = new JLabel( " Hello World " );
iPanel.add(iLabel);
//Display the window.
iFrame.pack();
iFrame.setVisible(true);
}
}
Message.java
public interface Message extends Remote {
void sayHello(String name) throws RemoteException;
}
MainClient.java
public class MainClient {
private void doTest(){
try {
// fire to localhost port 1099
Registry myRegistry = LocateRegistry.getRegistry( " cawcdhplnx016 " , 1099);
// search for myMessage service
Message impl = (Message) myRegistry.lookup( " myMessage " );
// call server's method
impl.sayHello( " at " + new Date());
System.out.println( " Message Sent " );
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
MainClient main = new MainClient();
main.doTest();
}
}
JNLP file:
<?xml version= " 1.0 " encoding= " utf-8 " ?>
<!-- JNLP File for RTT's ALU LTE -->
<jnlp
spec= " 1.0+ "
codebase= " http://realtime.eng.vzwcorp.com/webstart/test/RmiTest " >
<information>
<title>RMI Test</title>
<vendor>Blah</vendor>
<homepage href= " docs/help.html " />
<description> " RMI Test " </description>
<description kind= " short " > " RMI Test " </description>
<icon href= " images/Chart11.gif " />
<icon kind= " splash " href= " images/Chart11.gif " />
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version= " 1.7+ " java-vm-args= " -Xmx768m -Xss1m " />
<jar href= " RmiTest.jar " main= " true " />
</resources>
<application-desc main-class= " MainServer " />
</jnlp>
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
unknown
SUPPORT :
YES
java version " 1.7.0_25 "
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux cawcdhplnx016.nss.vzwnet.com 2.6.32-220.4.2.el6.x86_64 #1 SMP Mon Feb 6 16:39:28 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
Windows: Version 6.1.7601
A DESCRIPTION OF THE PROBLEM :
On both Linux and Windows running 7u25, webstart applications that use RMI with SwingUtlities.invokeLater throw a NPE.
If started from the command line, the program works fine -- only fails if started via web start.
Earlier JRE versions work fine.
Fails on both Linux and Windows.
See the full stack trace below.
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)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See sample code below.
-Compile MainServer and Message into a jar (in this case RmiTest.jar) and place on web server.
-Launch via the attached JNLP file.
-From the command line or IDE, run MainClient
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The JLabel text will update successfully.
ACTUAL -
The 'MainClint' will throw a NPE every time.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
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 MainServer.sayHello(MainServer.java:41)
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 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
at $Proxy0.sayHello(Unknown Source)
at MainClient.doTest(MainClient.java:18)
at MainClient.main(MainClient.java:28)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
MainServer.java:
public class MainServer extends UnicastRemoteObject implements Message {
private void startServer(){
try {
// create on port 1099
Registry registry = LocateRegistry.createRegistry(1099);
// create a new service named myMessage
registry.rebind( " myMessage " , this);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println( " system is ready " );
}
public static void main(String[] args) throws Exception {
final MainServer mMain = new MainServer();
mMain.startServer();
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
mMain.createAndShowGUI();
System.out.println( " Main: " + this);
}
});}
public MainServer() throws RemoteException {
}
@Override
public void sayHello(final String name) throws RemoteException {
final String mText = " hello " +name;
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
iLabel.setText(mText);
iFrame.pack();
}
});
System.out.println( " Text: " + mText + " , " + this);
}
JLabel iLabel;
JFrame iFrame;
JPanel iPanel;
void createAndShowGUI() {
//Create and set up the window.
iFrame = new JFrame( " rmi test " );
iFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
iPanel = new JPanel();
iFrame.add(iPanel);
//Add the ubiquitous " Hello World " label.
iLabel = new JLabel( " Hello World " );
iPanel.add(iLabel);
//Display the window.
iFrame.pack();
iFrame.setVisible(true);
}
}
Message.java
public interface Message extends Remote {
void sayHello(String name) throws RemoteException;
}
MainClient.java
public class MainClient {
private void doTest(){
try {
// fire to localhost port 1099
Registry myRegistry = LocateRegistry.getRegistry( " cawcdhplnx016 " , 1099);
// search for myMessage service
Message impl = (Message) myRegistry.lookup( " myMessage " );
// call server's method
impl.sayHello( " at " + new Date());
System.out.println( " Message Sent " );
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
MainClient main = new MainClient();
main.doTest();
}
}
JNLP file:
<?xml version= " 1.0 " encoding= " utf-8 " ?>
<!-- JNLP File for RTT's ALU LTE -->
<jnlp
spec= " 1.0+ "
codebase= " http://realtime.eng.vzwcorp.com/webstart/test/RmiTest " >
<information>
<title>RMI Test</title>
<vendor>Blah</vendor>
<homepage href= " docs/help.html " />
<description> " RMI Test " </description>
<description kind= " short " > " RMI Test " </description>
<icon href= " images/Chart11.gif " />
<icon kind= " splash " href= " images/Chart11.gif " />
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version= " 1.7+ " java-vm-args= " -Xmx768m -Xss1m " />
<jar href= " RmiTest.jar " main= " true " />
</resources>
<application-desc main-class= " MainServer " />
</jnlp>
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
unknown
SUPPORT :
YES
- duplicates
-
JDK-8019274 RMI thread can no longer call out to AWT thread for webstart app
-
- Closed
-
- relates to
-
JDK-8143287 SwingUtilities API call throws NPE with JRE 1.8.0_51
-
- Closed
-