Java 从线程外更新SWT,无法执行runnable

Java 从线程外更新SWT,无法执行runnable,java,swt,Java,Swt,我一直在寻找这个问题的答案,但无论是在S/O上还是在web上的其他任何地方,都没有一个解决方案是有效的 我的项目有两部分。其中一部分是SWT呈现的屏幕本身(以及一些基本的事件处理)。另一部分是通过套接字处理服务器/客户端通信的网络类 我目前正在做的是尝试允许在程序中更改名称,这样当客户端键入“name Josh”时,它会将屏幕上的名称设置为Josh,更新创建的标签。这就是我被困的地方。我创建了一个名为“updater”的方法,随着时间的推移,它将扩展到更多,但现在只更新一个标签。我在GUI类中创

我一直在寻找这个问题的答案,但无论是在S/O上还是在web上的其他任何地方,都没有一个解决方案是有效的

我的项目有两部分。其中一部分是SWT呈现的屏幕本身(以及一些基本的事件处理)。另一部分是通过套接字处理服务器/客户端通信的网络类

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

更新程序方法(在GUI类中)

调用更新程序方法(从网络类)

IntroScreen.updater(拆分[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的完整源代码:

网络的完整来源:


我在这里撞到了一堵砖墙。有人知道为什么会发生这种情况吗?如果你知道,我希望你能解释一下我应该如何思考以防止类似的错误继续发生。

你试图在错误的一端解决问题。您的
显示
不为空,您的
可运行
已被SWT事件队列成功接受。失败的是该runnable中的代码,因此此行中的某些内容为null:

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

它可能是
lblPlayer2
变量。

你完全正确!似乎我分配lblPlayer2的方式与分配lblPlayer1的方式不同。lblPlayer2创建为
标签lblPlayer2
,尽管我已经创建了对象。感谢您快速(最终正确)的回答!时间一到,我就接受你的回答。
if(!lblPlayer2.getText().equals(arg)) { lblPlayer2.setText(arg); }