2

我必须创建一个具有 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()我创建服务器套接字并接受调用的方法在哪里

4

2 回答 2

3

您应该创建一个单独的线程来等待/处理网络连接。

当有新连接进入时,读取数据并将它们传递给 EDT 以更新 GUI。

这样,GUI 将响应。

您应该阅读有关MVC 模式线程的信息。如果你谷歌有大量的文章要研究

更新:

你这里的代码是错误的。

SwingUtilities.invokeLater(new Runnable(){public void run(){connection();}});

您正在处理来自 EDT 线程的连接。
您应该使用它来更新 GUI,而不是调用网络 I/O 代码。

于 2012-01-15T16:57:14.683 回答
3

IO 逻辑必须在(至少一个)单独的后台线程中。每次必须从这些后台线程之一将某些内容打印到文本区域时,他们应该使用SwingUtilities.invokeLater(),以确保仅从事件调度线程访问 Swing 组件。

也就是说,我认为为服务器提供 GUI 并不是一个好主意。您为什么不简单地写入日志文件,然后使用任何文本编辑器查看服务器收到的内容。还是把服务器的GUI写成这个服务器的客户端?

于 2012-01-15T16:58:05.530 回答