gpt4 book ai didi

java - 从非 UI 线程更新 "checkBox"

转载 作者:行者123 更新时间:2023-12-01 10:28:27 26 4
gpt4 key购买 nike

我最近编写了一个“战舰”程序作为学校项目,现在决定制作该程序的可移植移动版本。到目前为止,我也快完成了,唯一剩下的问题是我想要一个复选框(显然在 UI 线程上)在任何给定时刻轮到玩家时不断显示。在桌面版本中,我曾经在单独的线程中执行此操作,因此我不会阻塞主线程上的内容。代码如下:

public void run() {
while (true) {
if (ClientCurrentPlayer.currentPlayer == BattleshipMain.myPlayerNumber) {
BattleshipMain.yourTurn.setChecked(true);
} else if (ClientCurrentPlayer.currentPlayer != BattleshipMain.myPlayerNumber) {
BattleshipMain.yourTurn.setChecked(false);
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

但是,这会返回一个异常,表明我无法从创建 View 的线程之外的其他线程更新 View 。经过一番研究,我似乎可以使用 runOnUiThread 来解决这个问题。不过,我真的不明白该怎么做——如果我在 UI 线程上运行这段代码,它会阻止所有输入,对吗?而且我无法在单独的线程上运行代码并在 UI 线程中的方法中执行 setChecked 部分,因为它要么在错误的线程上运行该方法,要么我无法调用由于 runOnUiThread 无法在静态上下文中使用该方法。我不明白,请帮助我._。不过,提前致谢! :)

最佳答案

考虑使用事件驱动机制,而不是进行这样的轮询检查。您的线程可以简单地等待事件进入。UI 线程已经使用在幕后绑定(bind)到它的 Looper 执行此操作,您可以通过创建 Handler 来利用它code> 在主线程上,将您自己的 Handler.Callback 附加到该 Handler 并向其发送消息。或者,您可以将 Runnable 实例发送到 Handler

像这样的轮询线程看起来非常吸引人,但是您会遇到类似您所看到的问题,并且它们可能会导调用池性能不佳。

关于java - 从非 UI 线程更新 "checkBox",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35233656/

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