我必须创建一个具有GUI的应用程序。我的应用程序必须作为服务器工作。当它启动时,它必须接受所有传入连接并在JTextArea中写入输出。我的问题是我必须以我接受连接的方式创建ServerSocket ss = new ServerSocket(port_number)
和方法ss.accept
。我试图在我的gui的主要构造函数中创建但是ServerSocket
I/O
请求gui卡住了。有什么想法来解决这个问题?
我在GUI的构造函数中创建:
SwingUtilities.invokeLater(new Runnable(){public void run(){connection();}});
其中connection()
是我创建serversocket并接受调用
答案 0 :(得分:3)
您应该创建一个单独的线程来等待/处理网络连接。
当新连接进入时,读取数据并将它们传递给EDT以更新GUI。
这样GUI就会响应。
您应该阅读MVC Pattern个帖子。如果你谷歌有大量文章要研究
更新:
这里的代码错了。
SwingUtilities.invokeLater(new Runnable(){public void run(){connection();}});
您正在处理来自EDT线程的连接 您应该使用它来更新GUI而不是调用网络I / O代码。
答案 1 :(得分:3)
IO逻辑必须位于(至少一个)单独的后台线程中。每次必须从其中一个后台线程打印到文本区域时,他们应该使用SwingUtilities.invokeLater()
来执行此操作,以确保仅从事件派发线程访问Swing组件。
尽管如此,我认为为服务器设置GUI并不是一个好主意。为什么不简单地写入日志文件,并使用任何文本编辑器来查看服务器收到的内容。或者将服务器的GUI写为此服务器的客户端?