关闭由我的Java代码中启动的“jar”应用程序打开的窗口

时间:2012-05-14 18:57:12

标签: java swing jar

我有一个(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);
        }

2 个答案:

答案 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实例是您正在寻找的实例,然后您有一个允许随后处置它的引用。