JFrame 等待数据接收以执行其任务

JFrame waiting for data reception to perform its task

我有两个不同且独立的JFrame windows:

  1. DataFrame
  2. GraphFrame

第一个是供用户操作,输入不同的值和模式以显示在 2) 中的图形上。 1) 将特定值发送到 2)(双精度数组),以便 "GraphFrame" 可以创建图形。

我在DataFrame的"main"方法中调用了GraphFrame的"main "方法,使它们同时运行并且在整个过程中都可见。

我希望这些框架完全独立,这意味着 1) 的任务是发送值,2) 的任务是检查何时收到值,然后创建图表。

我也更喜欢将大部分方法保密,这样就无法从外部资源访问它们。

我的问题是,我不知道哪种方式是实现这种数据交换的最佳方式。 Frame 2) 保持 "listening" 需要接收的值的最佳方法是什么?

我应该在观察者 https://sourcemaking.com/design_patterns/observer 的帮助下在 2) 上创建 getters/setters 吗?

还是应该使用线程?

甚至创建一个不断等待值的传统循环,例如:

while(array.isEmpty()) {
     //stuck here
}
//create the graph from the values in array

目前我正在从 setter 方法中接收 2) 中的值,但到目前为止,我无法在获得这些值后执行我想要的代码。

您认为最好的实现方式是什么?

P.S.: 我应该考虑不从 DataFrame 和 运行 这两个分别调用 GraphFrame main 吗?

您可以尝试让 GraphFrame 初始化然后停止,但在 GraphFrame 中有一个 (static/nonstatic) 方法,DataFrame 可以调用该方法来更新图形。之后,重新绘制 GraphFrame。

这是您要找的吗?

据我了解,您正试图 运行 同一应用程序中的两个 JFrames。从概念上讲,这是 one UI 分成两个 windows 而不是 运行ning 两个 Frames它。

Swing 要求所有 UI 元素由 一个 线程 - AWT 线程更新。此外,与 UI 的交互将在 AWT 线程中 运行。你需要考虑到这一点。

分离数据模型和视图也是最佳做法。要解决您的问题,您可以为由 DataFrame 上的更改操作的 GraphFrame 创建一个模型。这些变化可能例如由使用 SwingUtils.invokeLater() 更新 GraphFrame 的模型上的侦听器接收。

当然,您可能需要额外关注许多问题,并且根据您的要求,您可能需要进一步分离这两个部分。