创建一个有gui的服务器应用程序

时间:2012-01-15 16:47:58

标签: java swing sockets event-dispatch-thread concurrency

我必须创建一个具有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并接受调用

的方法

2 个答案:

答案 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写为此服务器的客户端?