gpt4 book ai didi

java - 方法未以同步方式执行

转载 作者:行者123 更新时间:2023-12-01 14:19:22 25 4
gpt4 key购买 nike

我正在构建一个基于 MVC 的 Java 应用程序,并且我的 Controller 中有一个特定的方法(如下所示),其行为如下:

  • 正如我所希望的那样,模型通过初始化方法进行更新。
  • View 的更新没有发生,因为 model.start() 方法永远不会终止(因为它是一个无限的 while 循环)。

我希望首先更新我的 View ,然后能够start()我的模型。如何更改代码以获得所需的行为?

我想一种解决方法是用触发我的模型能够观察到的事件的代码替换 model.start() 行,但我还没有尝试过,因为我想了解我的问题的根源。

另外,我不知道这是否相关,但我的主应用程序类通过 SwingUtilities.invokeLater(new Runnable()... 为我的 swing 组件定义了一个单独的线程,以及我的 View 由 swing 组件组成。可能存在与多线程执行相关的一些问题,如果是这样,那就可以解释为什么我的 initializedPerformed() 方法没有以同步方式执行。

Controller 中的方法的行为与我期望/想要的不同:

public void initializePerformed(Event e) {
model.initialize(e);
view.getPanel().setName(model.getName());
model.start();
}

model.start():

public void start() {
while (true) {

}
}

最佳答案

如果您根本需要 model.start() (我非常怀疑您这样做),那么请在单独的线程中启动它,如下所示:

new Thread() {
public void run() {
model.start();
}
}

如果model实际上是从Thread继承的,那么您根本不应该重写start()。您应该覆盖 run(),它在 Thread.start() 之后以及新线程实际创建之后调用。如果您重写 start(),则不会创建新线程。

关于java - 方法未以同步方式执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17756160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com