Name: rk38400 Date: 05/08/98
The following JApplet calls invokeLater from init(). When the invokeLater() runs, it spawns a new thread which also calls invokeLater(). The second invokeLater from the spawned thread never runs under JDK 1.1.6 and Activator. It does run in IE4.
Here is the output from 1.1.6:
enter init, calling invokeLater
Swing: checked access to system event queue.
enter init invokeLater
exit init
enter thread, calling invokeLater
exit thread
exit init invokeLater
Here is the correct output from IE4:
enter init, calling invokeLater
Swing: checked access to system event queue.
exit init
enter init invokeLater
enter thread, calling invokeLater
exit thread
exit init invokeLater
*** enter thread invokeLater
*** exit thread invokeLater
<PRE>
import com.sun.java.swing.*;
public class Later extends JApplet implements Runnable {
public void init() {
System.out.println("enter init, calling invokeLater\r");
SwingUtilities.invokeLater(this);
System.out.println("exit init\r");
}
public void run() {
System.out.println("enter init invokeLater\r");
spawnThread();
try { Thread.sleep(3000); } catch (InterruptedException e) {}
System.out.println("exit init invokeLater\r");
}
private void spawnThread() {
new Thread(new Runnable() {
public void run() {
System.out.println("enter thread, calling invokeLater\r");
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// This method never runs in JDK 1.1.6 appletviewer.
// It does run in IE4
System.out.println("*** enter thread invokeLater\r");
System.out.println("*** exit thread invokeLater\r");
}
});
System.out.println("exit thread\r");
}
}).start();
}
}
</PRE>
(Review ID: 29983)
======================================================================