// when the reflection calls in this method has to be
// replaced once Sun provides a public API to pump events.
public void start() throws Exception {
Class clazz = Class.forName("java.awt.Conditional");
Object conditional = Proxy.newProxyInstance(
clazz.getClassLoader(),
new Class[] {clazz},
this);
Method pumpMethod = Class.forName("java.awt.EventDispatchThread")
.getDeclaredMethod("pumpEvents", new Class[] {clazz});
pumpMethod.setAccessible(true);
pumpMethod.invoke(Thread.currentThread(), new Object[] {conditional});
}
}
// 调用方法
public static void showAsModal(final Frame frame, final Frame owner) {
frame.addWindowListener(new WindowAdapter() {
public void windowOpened(WindowEvent e) {
owner.setEnabled(false);
}
public void windowClosed(WindowEvent e) {
owner.setEnabled(true);
owner.removeWindowListener(this);
}
});
owner.addWindowListener(new WindowAdapter() {
public void windowActivated(WindowEvent e) {
if (frame.isShowing()) {
frame.setExtendedState(JFrame.NORMAL);
frame.toFront();
}
else {
owner.removeWindowListener(this);
}
}
});
frame.setVisible(true);
try {
new EventPump(frame).start();
}
catch (Throwable throwable) {
throw new RuntimeException(throwable);
}
}