1

私は(Swing + AWT)アプリケーションを持っています。これは外部のjarライブラリを使用します(そのmain中のメソッドを呼び出すことによって)。この外部アプリケーションは、イベントが発生するたびにウィンドウを開きます(ボタンが押されるなど)。外部のjarソースコードにアクセスできないことを考慮してください。

メインを再度呼び出す前に、以前に開いたウィンドウを閉じるにはどうすればよいですか?

このactionPerformedように見えます:

private void anActionPerformed(java.awt.event.ActionEvent evt) {
           String [] argv = {"arg1","arg2","arg3"};
           com.somepackage.SomeClass.main(argv);
        }
4

2 に答える 2

1

SomeClass.mainがCtorを新しいSomeClassと呼んでいると推測できますが、これは間違っている可能性があります。

あなたはそれを自分で呼ぶことを試みることができます:

SomeClass someclass = new SomeClass ();

これはJFrameであり、多くの場合mainで初期化され、いくつかのプロパティが設定されることがよくあります。

someclass.setSize (...
someclass.setLocation (...
someclass.setVisible (true);

それが機能する場合は、後で呼び出すことができる方法でsomeclass参照を格納できます

someclass.dispose ();
someclass = new SomeClass ();

それ以外の場合は、jar内のすべてのクラスを検索できます。

jar -tf some.jar

リフレクションとイントロスペクションを使用して、呼び出すctorを検索します。

または、SomeClassを拡張しようとします。これは最終的なものではなく、継承できる可能性があります。

class MyClass extends SomeClass 
于 2012-05-14T22:00:07.413 に答える
1

おそらく最も安全な方法ではありませんが、このWindow#getWindows方法の使用を検討することをお勧めします。Windowaがmainメソッドを呼び出すことによって作成されることがわかっている場合は、mainWindowを呼び出す直前にすべてのインスタンスを要求し、Window後でそれをすべてのインスタンスと比較できます。新しいWindowインスタンスはあなたが探しているものであり、それからあなたは後でそれを処分することを可能にする参照を持っています。

于 2012-05-14T22:06:54.407 に答える