1

我有一个(Swing + AWT)应用程序,它使用外部 jar 库(通过调用其中的main方法)。每次发生事件(例如按下按钮)时,此外部应用程序都会打开一个窗口。请考虑我无法访问外部 jar 源代码。

如何在再次调用 main 之前关闭先前打开的窗口?

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 调用了一个新的 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方法。如果您知道 a是通过调用 main 方法创建的,则可以在调用 main 之前Window询问所有实例,然后将其与所有实例进行比较。新实例是您要查找的实例,然后您有一个参考,可以在之后处理它。WindowWindowWindow

于 2012-05-14T22:06:54.407 回答