JFrame 等待数据接收以执行其任务
JFrame waiting for data reception to perform its task
我有两个不同且独立的JFrame
windows:
DataFrame
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 的模型上的侦听器接收。
当然,您可能需要额外关注许多问题,并且根据您的要求,您可能需要进一步分离这两个部分。
我有两个不同且独立的JFrame
windows:
DataFrame
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 的模型上的侦听器接收。
当然,您可能需要额外关注许多问题,并且根据您的要求,您可能需要进一步分离这两个部分。