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

Java swing applet中使用的套接字

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

Java swing applet中使用的套接字

基于此示例,这是一个使用Swing的简单网络客户端/服务器对。请注意与正确同步有关的一些问题:GUI本身是使用事件分配线程构建的

invokeLater()
。此外,代码还依赖的线程安全性
append()
。最后,它结合了文章Text Area Scrolling中的一个方便提示。

更新:在Java 7中,

append()
不再标记为线程安全;
invokeLater()
用于
display()
序列更新。

package net;import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;import java.util.Scanner;import javax.swing.*;import javax.swing.text.DefaultCaret;public class Echo implements ActionListener, Runnable {    private static final String HOST = "127.0.0.1";    private static final int PORT = 12345;    private final Jframe f = new Jframe();    private final JTextField tf = new JTextField(25);    private final Jtextarea ta = new Jtextarea(15, 25);    private final JButton send = new JButton("Send");    private volatile PrintWriter out;    private Scanner in;    private Thread thread;    private Kind kind;    public static enum Kind {        Client(100, "Trying"), Server(500, "Awaiting");        private int offset;        private String activity;        private Kind(int offset, String activity) { this.offset = offset; this.activity = activity;        }    }    public Echo(Kind kind) {        this.kind = kind;        f.setTitle("Echo " + kind);        f.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        f.getRootPane().setDefaultButton(send);        f.add(tf, BorderLayout.NORTH);        f.add(new JScrollPane(ta), BorderLayout.CENTER);        f.add(send, BorderLayout.SOUTH);        f.setLocation(kind.offset, 300);        f.pack();        send.addActionListener(this);        ta.setLineWrap(true);        ta.setWrapStyleWord(true);        DefaultCaret caret = (DefaultCaret) ta.getCaret();        caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);        display(kind.activity + HOST + " on port " + PORT);        thread = new Thread(this, kind.toString());    }    public void start() {        f.setVisible(true);        thread.start();    }    //@Override    public void actionPerformed(ActionEvent ae) {        String s = tf.getText();        if (out != null) { out.println(s);        }        display(s);        tf.setText("");    }    //@Override    public void run() {        try { Socket socket; if (kind == Kind.Client) {     socket = new Socket(HOST, PORT); } else {     ServerSocket ss = new ServerSocket(PORT);     socket = ss.accept(); } in = new Scanner(socket.getInputStream()); out = new PrintWriter(socket.getOutputStream(), true); display("Connected"); while (true) {     display(in.nextLine()); }        } catch (Exception e) { display(e.getMessage()); e.printStackTrace(System.err);        }    }    private void display(final String s) {        EventQueue.invokeLater(new Runnable() { //@Override public void run() {     ta.append(s + "u23CEn"); }        });    }    public static void main(String[] args) {        EventQueue.invokeLater(new Runnable() { //@Override public void run() {     new Echo(Kind.Server).start();     new Echo(Kind.Client).start(); }        });    }}


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

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

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