java - 在这种情况下我应该使用什么类型的消息传递? GUI 向线程发送命令; java

标签 java multithreading swing sockets

我有一个 JFrame,我称之为 mainFrame,它是在使用我的程序时向用户显示的主 JFrame。

该程序创建一个到服务器的套接字,并在它和服务器之间来回发送消息。

我正在尝试创建一个线程来处理连接。因此,当用户单击“连接”时,线程将设置套接字和关联的输入和输出流。然后我希望线程等待,直到 JFrame 向它发送一个命令,该命令只是一个字符串,它应该打印到套接字的输出流。 Thread 将发送命令,读取响应,然后等待另一个命令。

我想我可以设置一个队列,我可以将命令“存放”到其中,然后当线程到达它时,它可以从队列中拉出第一个命令并随意处理它。

有什么想法吗?

此外,目前我将参数 this 传递给线程,以便它可以访问 JFrame 中的函数以将输出打印到文本区域。这样可以吗?我可以允许线程调用生成它的 JFrame 中的方法吗?

最佳答案

建议:

  • Swing GUI 可以将文本发送到套接字,我不认为为此需要任何额外的线程,因为这是非阻塞的。
  • 是的,需要一个单独的线程来等待套接字并读取传入的数据。您可以为此目的使用 Scanner 或 BufferedReader。
  • 然后可能在遇到任何换行字符时将文本从此线程发送到 GUI。这将需要在 EDT 上完成,可能是通过 SwingWorker 与 PropertyChangeListener 的发布/处理方法对。
  • 是的,后台线程可以调用 GUI 上的方法,但始终注意在 Swing 事件线程上执行此操作,方法是将代码放在 Runnable 中并通过 SwingUtilities.invokeLater 将其排队到 Swing 事件队列中(...)

编辑
你评论:

What does "on the EDT" mean?

EDT = Swing Event Dispatch T线程,执行所有 Swing 绘图和用户交互的主 Swing 线程。如果您阻止该线程,您将阻止所有 Swing 的显示和 UI,基本上卡住您的程序。详情请见Concurrency in Swing .

Also say that sending text to the socket was blocking, how might I setup a command queue for it?

我不明白这个问题,因为据我所知,在套接字上发送信息不应该是阻塞的。

关于java - 在这种情况下我应该使用什么类型的消息传递? GUI 向线程发送命令; java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21199254/

相关文章:

java - MongoDB Java 驱动程序数据库与 Tomcat 的连接池

java - 我可以实例化我的 Activity……我应该吗?

java - Jelly中的${it}变量是如何设置的

Java——使用线程来启动——暂停——停止一个微型编程世界

c++ - 是否可以在同一进程中拥有多个 ORB 对象?

java - 哪种布局管理器最适合行和列表示

java - 如何从文本区域或文本字段检索数据并将其存储在具有相同数据格式的文本文件中,java

JavaEE : Web Service Deployed Successfully but Tester is not Working

c - 异步线程的问题(使用 pthread)。抱歉,但更具体的是 body

java - JXMultiSplitPane隐藏节点导致绘画问题