我已经搜索了自己的血腥答案,但是在S / O和网络上任何其他地方都没有解释过的解决方案似乎都没有。
我的项目有两个部分。一部分是SWT呈现的屏幕本身(以及一些基本的事件处理完成)。另一部分是Network-class,它通过套接字处理服务器/客户端通信。
我目前正在尝试允许在程序中更改名称,以便当客户端键入“name Josh”时,它会将屏幕上的名称设置为Josh,更新创建的标签。这就是我被困住的地方。我创建了一个名为“updater”的方法,随着时间的推移,它将扩展到更多,但现在只更新标签。我在GUI类中创建了这个函数,并将其公开以从网络类中调用。但是,当它被调用时,我得到一个错误,说它无法创建该runnable,指向Null指针异常。我尝试了Display.getCurrent();
,Display.getDefault();
和UIPlatform.getWorkBench().getDisplay()
,但似乎都没有。
更新程序方法(在GUI类中)
public static void updater(String arg)
{
Display.getDefault().asyncExec(new Runnable()
{
public void run()
{
if(!lblPlayer2.getText().equals(arg)) { lblPlayer2.setText(arg); }
}
});
}
调用updater方法(来自网络类)
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
我在这里碰了一堵砖墙。有没有人知道为什么会这样,如果你这样做,我会喜欢它,如果你能解释我应该如何思考以防止这样的错误。
答案 0 :(得分:2)
您正试图在错误的一端解决问题。您的Display
不为空,并且SWT事件队列已成功接受您的Runnable
。失败的是中可运行的代码,因此此行上的某些内容为null:
if(!lblPlayer2.getText().equals(arg)) { lblPlayer2.setText(arg); }
可能是lblPlayer2
变量。