は、私がモーダルダイアログを起動するには、次のコードを呼び出す:アプレット内からモーダルダイアログをシミュレートするにはどうすればよいですか? setVisible(true)をオン
private synchronized void startModal() {
try {
if (SwingUtilities.isEventDispatchThread()) {
EventQueue theQueue = getToolkit().getSystemEventQueue();
while (isVisible()) {
AWTEvent event = theQueue.getNextEvent();
Object source = event.getSource();
if (event instanceof ActiveEvent) {
((ActiveEvent) event).dispatch();
} else if (source instanceof Component) {
((Component) source).dispatchEvent(event);
} else if (source instanceof MenuComponent) {
((MenuComponent) source).dispatchEvent(event);
} else {
System.err.println("Unable to dispatch: " + event);
}
}
} else {
while (isVisible()) {
wait();
}
}
} catch (InterruptedException ignored) { }
}
これは、ほとんどのブラウザでちょうど素晴らしい作品。ただし、Windows版のOperaとSafariで、Iは大厄介な例外以下に直面しています:
java.security.AccessControlException: access denied (java.awt.AWTPermission accessEventQueue)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkAwtEventQueueAccess(Unknown Source)
at java.awt.Toolkit.getSystemEventQueue(Unknown Source)
は、これらのブラウザで偽のモーダルダイアログを生成するための回避策はありますか?
Java 1.6u13(その他)しかし、状態として、オペラとWindowsブラウザ上のSafariにはどちらも独自のJavaプラグインがあります。 – jsight
モーダルダイアログは実際にはダイアログではないので動作しません。ダイアログを閉じるまで、呼び出しコード(EDT上にある)をブロックするだけです。これを別のアプローチで書き直すこともできますが、2つの奇妙なブラウザのものを書き換えるのではなく、モーダルアプローチを採用することをお勧めします。 – jsight
IIRC、Operaはyee olde "Firefox 2"プラグインを使用しています。これはこれまでと同じように動作するはずです。彼らは本当にFirefox 3/Chromeプラグインの新しいインターフェースで乗り越えなければなりません。デコレーションオフスクリーンなしでダイアログを開くことができます。これがWebStartとPlugInのセキュリティダイアログの機能です(ただし、IIRC、彼らは装飾を残していますが、これはあまり明るくありません)。 –