java - 如何在不创建实际对象的情况下访问类的已运行实例

标签 java multithreading class instance runnable

我在使用 Java GUI 时遇到问题。这很难解释,但我会尽力而为。我有 2 个 GUI 类,一个是 I 类,另一个是 G 类。I 类是从 main 方法启动的。在 I 类中有一个 G 类的字段(实例)。原因是 I 类收集重要信息并将其传递给 G 类的实例。当 I 类中按下按钮时,会将 I 类框架可见性设置为 false,并且将类 G 的实例设置为 true(显示 G 接口(interface))。这里的问题是我希望能够在 G 中创建一个监听器,将 I 的可见性设置回 true,从而显示之前编辑的窗口。我有一个处理所有框架并创建一个新实例的解决方案,但这仅显示了一个新的已清除的 I 实例。以下是一些代码片段:

第一类:

字段:

private JFileChooser j;
private FileFilter filter;
private GUI g;  //<--- it is initialized shortly after.
private Font masterFont;
private JFrame frame;
private JButton done;

private JButton browse1;
private JButton browse2;.....

设置 G 可见,I 不可见:

class Done implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {

        for (int i = 0; i < 9; i++) {
            System.out.println(array[i]);
        }

        g.setArray(array);
        System.out.println(array);
        setText();
        frame.setVisible(false);
        g.setVisible(true);
        g.setVisible2(false);
        if (g.clear.isSelected()) {
            frame.setVisible(true);
        }


    }

G 类:注意,这里我无法创建 I 的实例,因为我不断收到 Stack Overflow 错误。

硬重置:这个只是创建新实例,同时处理其余实例(可能很浪费,因为 I 的旧实例没有正确关闭)

private class Reset implements ActionListener {
    @Override
        public void actionPerformed(ActionEvent arg0) {
            frame.dispose();
            frame2.dispose();

            Runnable runnable = new Runnable() {
                @Override
            public void run() {
                Intro g = new Intro();
                g.setVisible(true);

            }
        };
        EventQueue.invokeLater(runnable);
    }
}

我希望能够访问 I 的“已运行”实例,而无需创建任何新实例。

最佳答案

您可以从传递到 ActionListener 的 actionPerformed 方法中的 ActionEvent 对象获取当前顶级窗口。通过 getSource() 获取导致调用监听器的源对象,然后在源上调用 SwingUtilities.getWindowAncestor() 来获取 Window(JFrame、JDialog、或无论是什么)。

关于java - 如何在不创建实际对象的情况下访问类的已运行实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15857984/

相关文章:

multithreading - IP扫描程序多线程中的关键部分

c++ - DBUS-- 多线程处理

Java从其他文件导入

java - 将单例用于不可变的无参数类不好吗?

java - WebViews 的 ViewGroup 历史记录问题

Java:枚举常量中方法和变量的定义

c++ - 计算素数频率的多线程程序会给出不准确的结果。

c++ - "A is nested class in B"是可传递的关系吗?

java - 声明一个全局变量,或者在每个类中声明多次

java - 获取开始日期和结束日期的数据