2

Javaアプリケーションのさまざまなイベントディスパッチスレッドでさまざまな実行にアクセスする方法JFrame ここで提示されたSSCCEを確認してください この場合、JVMの新しいインスタンスまたはリフレクションが役立ちます

最後に、私が述べたように、次のコードが最初のクラスに追加された場合

Frame[] f2 = JFrame.getFrames();

for(Frame fx: f2){
    System.out.println(fx.getTitle());
    fx.addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent we){
}

SSCCEで2番目のクラスに順番に追加された場合は1つのフレームのみが返され、3番目のクラスに追加された場合はすべてのフレームが返されます。これは、イベントディスパッチスレッドによる問題ですか。この動作の背後にある理由は何ですか。メインフレーム、つまりMyAppからすべてのフレームにアクセスする方法。

なぜJFrame.getFrames(); awt Framesを返します。たとえば、アプリケーション内のすべてのJFrameのデフォルトのクローズ操作を変更したい場合、gerFramesはawtフレームを返します。これは、JFrameのcasetが例外を生成する場合に発生します。

スレッド"main"の例外java.lang.ClassCastException:[Ljava.awt.Frame; [Ljavax.swing.JFrame;にキャストできません。myApp.MYApp.main(MYApp.java:48)で

4

1 に答える 1

7

コード行

Window[] allWindows = Window.getWindows();

Top-Level Containers現在のすべての配列を返しますJVM

  • J/Frame

  • J/Dialog(JOptionPane)

  • J/Window

テストする必要があります

if (allWindows[i] instanceof JFrame) {
于 2012-07-20T06:52:55.540 に答える