我已经搜索了自己血腥的答案,但没有解决方案在S/O或网络上的任何其他地方解释似乎没有工作。从线程更新SWT,未能执行可运行
我有两个部分,我的项目。一部分是SWT呈现的屏幕本身(以及一些基本的事件处理完成)。另一部分是通过套接字处理服务器/客户端通信的网络类。
我现在正在做的是试图允许在程序中更改名称,以便当客户端键入“名称Josh”时,它会将屏幕上的名称设置为Josh,更新创建的标签。这是我卡住的地方。我创建了一个名为“updater”的方法,随着时间的推移,这个方法将会扩展更多,但现在只更新一个标签。我在GUI类中创建了这个函数,并公开从网络类中调用它。但是,当它被调用时,我收到一个错误,说它无法创建可运行的,指向空指针异常。我试过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); }
}
});
}
电话更新方法(从网络级)
IntroScreen.updater(split[1]);
ERROR
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
为妫满来源:http://hastebin.com/abolederul.java
为网络提供完整的源:http://hastebin.com/ipulirifat.java
我已经在这里打了一个砖墙。有没有人知道为什么会出现这种情况,如果你这样做,我会很喜欢它,如果你能解释我应该如何思考,以防止类似这样的错误发生。
你是完全正确的!似乎我没有像我分配lblPlayer1一样分配lblPlayer2。 lblPlayer2被创建为'Label lblPlayer2',即使我已经创建了该对象。感谢您提供非常快速(最终正确)的答案!一旦计时器耗尽,我会接受你的答案。 – CmdrSharp 2014-11-25 13:13:20