栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java套接字swingWorker正在运行,但未接收或发送任何消息

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java套接字swingWorker正在运行,但未接收或发送任何消息

这是一个非常基本的例子。

基本上,由于您的程序需要异步通信(也就是说,您需要能够从套接字读取并同时对其进行写入),因此需要将每个流卸载到单独的线程中。

很好,此示例的管理过程不存在。实际上,您应该具有某种“连接”管理器,该管理器可以干净地关闭输出和输入线程,以便例如,当用户键入“再见”时,输出线程将能够告诉连接管理器:连接应终止。然后它将告诉输入线程停止读取任何新消息并终止…

客户

public class Client {    public static void main(String[] args) {        try { Socket master = new Socket("localhost", 8900); new Thread(new InputHandler(master)).start(); new Thread(new OuputHandler(master)).start();        } catch (Exception ex) { ex.printStackTrace();        }    }    public static class InputHandler implements Runnable {        private Socket socket;        public InputHandler(Socket socket) { this.socket = socket;        }        @Override        public void run() { boolean commune = true; BufferedReader reader = null; try {     reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));     while (commune) {         String text = reader.readLine();         System.out.println("n<server> " + text);         if (text.toLowerCase().equals("bye")) {  commune = false;         }     } } catch (Exception exp) {     exp.printStackTrace(); } finally {     try {         reader.close();     } catch (Exception e) {     }     try {         socket.close();     } catch (Exception e) {     } }        }    }    public static class OuputHandler implements Runnable {        private Socket socket;        public OuputHandler(Socket socket) { this.socket = socket;        }        @Override        public void run() { boolean commune = true; BufferedWriter writer = null; try {     writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));     Scanner scanner = new Scanner(System.in);     while (commune) {         System.out.print("> ");         String text = scanner.nextLine();         writer.write(text);         writer.newline();         writer.flush();         if (text.equalsIgnoreCase("bye")) {  commune = false;         }     } } catch (Exception exp) {     exp.printStackTrace(); } finally {     try {         writer.close();     } catch (Exception e) {     }     try {         socket.close();     } catch (Exception e) {     } }        }    }}

服务器

public class Server {    public static void main(String[] args) {        try { ServerSocket master = new ServerSocket(8900); Socket socket = master.accept(); new Thread(new InputHandler(socket)).start(); new Thread(new OuputHandler(socket)).start();        } catch (Exception ex) { ex.printStackTrace();        }    }    public static class InputHandler implements Runnable {        private Socket socket;        public InputHandler(Socket socket) { this.socket = socket;        }        @Override        public void run() { boolean commune = true; BufferedReader reader = null; try {     reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));     while (commune) {         String text = reader.readLine();         System.out.println("n<client> " + text);         if (text.toLowerCase().equals("bye")) {  commune = false;         }     } } catch (Exception exp) {     exp.printStackTrace(); } finally {     try {         reader.close();     } catch (Exception e) {     }     try {         socket.close();     } catch (Exception e) {     } }        }    }    public static class OuputHandler implements Runnable {        private Socket socket;        public OuputHandler(Socket socket) { this.socket = socket;        }        @Override        public void run() { boolean commune = true; BufferedWriter writer = null; try {     writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));     Scanner scanner = new Scanner(System.in);     while (commune) {         System.out.print("> ");         String text = scanner.next();         writer.write(text);         writer.newline();         writer.flush();         if (text.equalsIgnoreCase("bye")) {  commune = false;         }     } } catch (Exception exp) {     exp.printStackTrace(); } finally {     try {         writer.close();     } catch (Exception e) {     }     try {         socket.close();     } catch (Exception e) {     } }        }    }}

更新(抱怨)

当我眼前出现您的源代码时…

应该很少需要做

textMessage.addKeyListener(this)

因为您使用

JTextField
,所以应该使用
ActionListener
。造成这种情况的原因有很多,但是对您而言,主要的原因是“接受”动作取决于外观。虽然大多数系统都
Enter
按“接受”的方式使用,但这并不是保证。

看看如何编写动作监听器以获取更多信息

鉴于您要执行的操作通常很复杂,因此+1是一个很好的整体尝试!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469503.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号