我有一个(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);
}
答案 0 :(得分: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
答案 1 :(得分:1)
也许不是最安全的方法,但您可以考虑使用Window#getWindows
方法。如果您知道通过调用main方法创建了Window
,则可以在调用main之前请求所有Window
实例,然后将其与所有Window
实例进行比较。新的Window
实例是您正在寻找的实例,然后您有一个允许随后处置它的引用。