如何访问在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)
答案 0 :(得分:7)
代码行
Window[] allWindows = Window.getWindows();
从当前Top-Level Containers
JVM
的数组
J/Frame
J/Dialog(JOptionPane)
J/Window
必须测试是否
if (allWindows[i] instanceof JFrame) {