2012-09-29 104 views
0

我正在NetBeans中创建一个服务器客户端应用程序项目。我使用NetBeans GUI构建器在JFrame上制作了一些Jpanel和其他一些东西(按钮,textfield,textarea,菜单)。 当我推新服务器按钮时,整个JFrame及其所有组件都被冻结,但服务器 - 客户端部分正在后台工作。我认为线程有问题, 但我还没有真正明白我应该做什么。Java swing组件被冻结

+2

代码或它没有发生。 –

回答

6

的问题可能是您的服务器 - 客户端代码就是在后台工作,但Swing事件线程上,而不是工作。你可以用SwingUtilities方法测试这个你知道:SwingUtilities.isEventDispatchThread()

另外:

  • 您是否使用了SwingWorker类做背景的工作?
  • 你是否在做任何带有后台线程的join()调用?
  • 你在等SwingWorkers get()方法吗?

你的代码的细节可能会帮助我们给你更具体的建议。要了解你应该做什么,请阅读,Lesson: Concurrency in Swing

+0

我设法找出了我的问题。我犯了一个愚蠢的错误。 当我想启动服务器线程时,我调用run方法而不是start。这就是为什么它被冻结。尽管如此,感谢您的建议。 – user1707095

+0

@ user1707095:我的建议然后是正确的:通过直接调用'run()'你可以在事件线程上调用长时间运行的代码。 –