gpt4 book ai didi

java - 从线程外更新 SWT,无法执行可运行

转载 作者:行者123 更新时间:2023-11-30 08:59:42 24 4
gpt4 key购买 nike

我竭尽全力寻找这个问题的答案,但无论是在 S/O 上还是在网络上的其他任何地方都没有解释的解决方案似乎都没有用。

我的项目有两个部分。一部分是 SWT 呈现的屏幕本身(并且完成了一些基本的事件处理)。另一部分是网络类,它通过套接字处理服务器/客户端通信。

我目前正在做的是尝试允许在程序中更改名称,这样当客户端键入“name Josh”时,它会将屏幕上的名称设置为 Josh,从而更新创建的标签。这就是我被困的地方。我创建了一个名为“updater”的方法,它会随着时间的推移扩展到更多,但现在只更新一个标签。我在 GUI 类中创建了这个函数,并将其公开以从网络类中调用。但是,当它被调用时,我收到一条错误消息,指出它无法创建该可运行对象,指向空指针异常。我试过 Display.getCurrent();Display.getDefault();UIPlatform.getWorkBench().getDisplay(),但是它们似乎都不起作用。

Updater 方法(在 GUI 类中)

public static void updater(String arg)
{
Display.getDefault().asyncExec(new Runnable()
{
public void run()
{
if(!lblPlayer2.getText().equals(arg)) { lblPlayer2.setText(arg); }
}
});
}

调用更新方法(来自网络类)

IntroScreen.updater(split[1]);

错误

org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Unknown Source)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at client.IntroScreen.open(IntroScreen.java:44)
at client.IntroScreen.main(IntroScreen.java:29) Caused by: java.lang.NullPointerException
at client.IntroScreen$2.run(IntroScreen.java:155)
at org.eclipse.swt.widgets.RunnableLock.run(Unknown Source)
... 5 more

GUI 的完整源代码: http://hastebin.com/abolederul.java

网络的完整来源: http://hastebin.com/ipulirifat.java

我在这里碰壁了。有没有人知道为什么会发生这种情况?如果知道,请解释一下我应该如何思考以防止发生此类错误。

最佳答案

您试图在错误的一端解决问题。您的 Display 不为空,并且您的 Runnable 已被 SWT 事件队列成功接受。失败的是可运行的 within 代码,因此此行上的某些内容为空:

if(!lblPlayer2.getText().equals(arg)) { lblPlayer2.setText(arg); }

它可能是 lblPlayer2 变量。

关于java - 从线程外更新 SWT,无法执行可运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27127562/

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