如何访问同一应用程序的不同线程中的所有JFrame

时间:2012-07-20 06:39:31

标签: java swing reflection jframe

如何访问在Java应用程序的不同事件派发线程中执行的不同JFrame请通过这里提出的SSCCE Will new instance of JVM or reflection help in this case

最后我提到如果将以下代码添加到第一个类

Frame[] f2 = JFrame.getFrames();

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

如果在SSCCE中按顺序添加到第二个类,则只返回一个帧,返回两个帧,如果添加到第三个类,则返回所有帧。这是由于事件调度线程导致此行为背后的原因导致的问题。如何从主框架访问所有框架,即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)

1 个答案:

答案 0 :(得分:7)

代码行

Window[] allWindows = Window.getWindows();

从当前Top-Level Containers

返回所有JVM的数组
  • J/Frame

  • J/Dialog(JOptionPane)

  • J/Window

必须测试是否

if (allWindows[i] instanceof JFrame) {