0

对不起,伙计们,但是在编写代码几个小时后我感到困惑。

情况:

我有两个 JFrame。这些是不同的 Java 类 - 其中一个是 FirstGUI,我们可以从中调用另一个名为 SecondGUI 的 JFrame。好的——这很清楚。我还有一个名为 Processor 的类,其中我有特定的方法,如“connectToPort”或“disconnectFromPort”。

此外,在 FirstGUI(具有 main 方法)中,我正在创建 SecondGUI 对象(并将 setVisible 设置为 false)和 Processor 对象,其中 FirstGUI 和 SecondGUI 作为参数。

问题:

我想从 FirstGUI 中调出 SecondGUI(通过 setVisible 为 true)——好的,完成。但是如何从 SecondGUI JFrame 中调出开头创建的 Processor 对象呢?调用 SAME 对象很重要,因为处理器方法可以例如在 FirstGUI JFrame.JTextPane 组件中设置文本,并将项目添加到 SecondGUI 的 JComboBox。

我不知道如何解决这个问题,我总是得到 NullPointerException。

编辑:我想补充一点,在创建 SecondGUI 时我不能将处理器对象作为参数传递,因为第二个 GUI 是较早创建的,并且它是创建处理器时的参数......这就是问题所在。

4

2 回答 2

2

构造第二个GUI(子)时,初始化类(FirstGUI)可以传入self构造函数,同时保留对构造对象的引用。现在两个 GUI 都相互引用:

class F1 extends JFrame {
   F2 child;

   void createF2() {
     child = new F2(this);
     child.setVisible(true);
   }
}

class F2 extends JFrame {
   final F1 parent;    
   F2(F1 parent) { this.parent = parent; };
}
于 2013-04-07T17:32:48.020 回答
1

如果您在此站点上搜索过您的问题或类似问题,您就会知道最常见的建议是不要使用多个 JFrame,因为这暗示了一个糟糕的设计。最好使用 CardLayout 交换视图或使用适当模式的 JDialogs。

至于您的问题,让一个类动态地将信息传递给另一个类,根据程序结构有两个主要选项。

  • 如果一个类在模态 JDialog 中,则在第二个窗口不再可见后,第一个类可以通过调用适当的 getter 方法从第二个模态类中提取信息。
  • 如果一个类以非模态方式显示,那么您将需要使用某种类型的侦听器,例如 PropertyChangeListener,以便在发生状态更改时让被观察类通知侦听类。

编辑
关于:

我想从 FirstGUI 中调出 SecondGUI(通过 setVisible 为 true)——好的,完成。但是如何从 SecondGUI JFrame 中调出开头创建的 Processor 对象呢?调用 SAME 对象很重要,因为处理器方法可以例如在 FirstGUI JFrame.JTextPane 组件中设置文本,并将项目添加到 SecondGUI 的 JComboBox。

Audrius 给了你一个答案。1+ 对他的回答投了赞成票。

我不知道如何解决这个问题,我总是得到 NullPointerException。

如果你得到一个 NPE,应该仔细检查抛出 NPE 的行以查看哪个变量为空,然后在你的代码中回溯以查看原因。如果您仍然停留在 NPE 上并需要我们的帮助,那么您将希望显示相关代码并向我们提供有关该问题的更多详细信息,包括注意哪个变量为空以及为什么您认为它不应该为空。

编辑:我想补充一点,在创建 SecondGUI 时我不能将处理器对象作为参数传递,因为第二个 GUI 是较早创建的,并且它是创建处理器时的参数......这就是问题所在。

这是一个非问题。由于依赖窗口是动态显示的,因此您始终可以在使用 setter 方法显示它之前传递一个引用。

于 2013-04-07T17:31:21.193 回答