Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从类外处理JFrame组件的最佳方法_Java_Multithreading_Swing_Jlabel - Fatal编程技术网

Java 从类外处理JFrame组件的最佳方法

Java 从类外处理JFrame组件的最佳方法,java,multithreading,swing,jlabel,Java,Multithreading,Swing,Jlabel,我正在开发一个swing应用程序,它调用多个方法并初始化不同的类。 我还有多个线程,它们在其中处理中间结果。我的要求是在一些标签和文本框中动态显示中间数据 请帮助我以下哪种方法在内存和性能方面是最好的 我可以为所有标签和文本框使用setter方法。因此,我可以使用swing类对象调用这些方法,但在这种情况下,我需要将swing类对象传递给每个类,只要我想将数据设置为标签 另一种方法是,我可以创建swing类的公共静态对象,并在需要设置标签文本时从任何类调用它 第一个方法会产生更多开销,因为我需要

我正在开发一个swing应用程序,它调用多个方法并初始化不同的类。 我还有多个线程,它们在其中处理中间结果。我的要求是在一些标签和文本框中动态显示中间数据

请帮助我以下哪种方法在内存和性能方面是最好的

  • 我可以为所有标签和文本框使用setter方法。因此,我可以使用swing类对象调用这些方法,但在这种情况下,我需要将swing类对象传递给每个类,只要我想将数据设置为标签
  • 另一种方法是,我可以创建swing类的公共静态对象,并在需要设置标签文本时从任何类调用它
  • 第一个方法会产生更多开销,因为我需要将my Swing类对象传递给其他类

    第二种方法是最简单的方法,但创建静态对象可能会造成混乱,因为此应用程序包含线程

    我只想知道选哪一个,为什么


    否则,如果有人从事过一些复杂的swing应用程序开发,您是如何处理此类问题的?

    为什么不使用带有单例原则的第二种方法,在这种方法中,您可以使用swing类的同一个单例,因此将不再使用静态方法,它有时令人困惑,因为我们不确定JVM加载静态成员的顺序…

    将GUI视为具有视图的模型。当您创建表示模型的模型类时,GUI组件构成了视图。对模型中的值所做的更改将反映在视图中。应用程序的其余部分与模型交互,而不是与视图交互

    这里有一个例子,是我在一家公司做的

    这是多线程环境中第一种典型的方法。为了方便起见,模型和视图是紧密耦合的:每个工作线程接收到一个对它应该更新的标签的引用。另一种选择是松耦合:每个视图注册以侦听模型,该模型使用

    该方法使用两种方法:

    • 紧密耦合:工作者在封闭范围内获得对其目标标签的引用

    • 松散耦合:封闭视图注册了一个
      PropertyChangeListener
      ,模型使用它通过
      setProgress()
      向视图发送信号


    您需要决定在应用程序中哪个是重要的。我同意@JB Nizet关于第二种方法的评论。

    忘掉你的第二种方法吧。很难看。不应该有那么多不同的对象需要更新给定的框架或面板。您计划如何在不使用静态字段的情况下实现您的单例?整个类中只有一个静态字段,即实例本身。其他字段根本不需要是静态的。有关更多详细信息,请参阅Head First设计模式的Singleton章节。。。