提交 68586a8d 编写于 作者: A anthony

7122796: SunToolkit constructor should create the EventQueue for the Main AppContext

Summary: Always create an EQ for the main AppContext in SunToolkit constructor
Reviewed-by: art
上级 34f8e42d
...@@ -342,6 +342,16 @@ public final class AppContext { ...@@ -342,6 +342,16 @@ public final class AppContext {
return appContext; return appContext;
} }
/**
* Returns the main ("system") AppContext.
*
* @return the main AppContext
* @since 1.8
*/
final static AppContext getMainAppContext() {
return mainAppContext;
}
private long DISPOSAL_TIMEOUT = 5000; // Default to 5-second timeout private long DISPOSAL_TIMEOUT = 5000; // Default to 5-second timeout
// for disposal of all Frames // for disposal of all Frames
// (we wait for this time twice, // (we wait for this time twice,
......
...@@ -101,30 +101,28 @@ public abstract class SunToolkit extends Toolkit ...@@ -101,30 +101,28 @@ public abstract class SunToolkit extends Toolkit
*/ */
public final static int MAX_BUTTONS_SUPPORTED = 20; public final static int MAX_BUTTONS_SUPPORTED = 20;
public SunToolkit() { private static void initEQ(AppContext appContext) {
Runnable initEQ = new Runnable() { EventQueue eventQueue;
public void run () {
EventQueue eventQueue;
String eqName = System.getProperty("AWT.EventQueueClass", String eqName = System.getProperty("AWT.EventQueueClass",
"java.awt.EventQueue"); "java.awt.EventQueue");
try { try {
eventQueue = (EventQueue)Class.forName(eqName).newInstance(); eventQueue = (EventQueue)Class.forName(eqName).newInstance();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
System.err.println("Failed loading " + eqName + ": " + e); System.err.println("Failed loading " + eqName + ": " + e);
eventQueue = new EventQueue(); eventQueue = new EventQueue();
} }
AppContext appContext = AppContext.getAppContext(); appContext.put(AppContext.EVENT_QUEUE_KEY, eventQueue);
appContext.put(AppContext.EVENT_QUEUE_KEY, eventQueue);
PostEventQueue postEventQueue = new PostEventQueue(eventQueue); PostEventQueue postEventQueue = new PostEventQueue(eventQueue);
appContext.put(POST_EVENT_QUEUE_KEY, postEventQueue); appContext.put(POST_EVENT_QUEUE_KEY, postEventQueue);
} }
};
initEQ.run(); public SunToolkit() {
// 7122796: Always create an EQ for the main AppContext
initEQ(AppContext.getMainAppContext());
} }
public boolean useBufferPerWindow() { public boolean useBufferPerWindow() {
...@@ -289,19 +287,7 @@ public abstract class SunToolkit extends Toolkit ...@@ -289,19 +287,7 @@ public abstract class SunToolkit extends Toolkit
// return correct values // return correct values
AppContext appContext = new AppContext(threadGroup); AppContext appContext = new AppContext(threadGroup);
EventQueue eventQueue; initEQ(appContext);
String eqName = System.getProperty("AWT.EventQueueClass",
"java.awt.EventQueue");
try {
eventQueue = (EventQueue)Class.forName(eqName).newInstance();
} catch (Exception e) {
System.err.println("Failed loading " + eqName + ": " + e);
eventQueue = new EventQueue();
}
appContext.put(AppContext.EVENT_QUEUE_KEY, eventQueue);
PostEventQueue postEventQueue = new PostEventQueue(eventQueue);
appContext.put(POST_EVENT_QUEUE_KEY, postEventQueue);
return appContext; return appContext;
} }
......
/*
* @test
* @bug 7122796
* @summary Tests 7122796
* @author anthony.petrov@oracle.com
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import sun.awt.*;
public class MainAppContext {
public static void main(String[] args) {
ThreadGroup secondGroup = new ThreadGroup("test");
new Thread(secondGroup, new Runnable() {
public void run() {
SunToolkit.createNewAppContext();
test(true);
}
}).start();
// Sleep on the main thread so that the AWT Toolkit is initialized
// in a user AppContext first
try { Thread.sleep(2000); } catch (Exception e) {}
test(false);
}
private static void test(boolean userAppContext) {
if (Toolkit.getDefaultToolkit().getSystemEventQueue() == null) {
throw new RuntimeException("No EventQueue for the current app context! userAppContext: " + userAppContext);
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册