项目一:udp1111
监听的有三个文件分别为:
guiHello.java 有关界面和事件响应功能
UdpFunc.java是udp类的封装:发送和接收
udpServer.java是入口函数,无实际意义
代码:
import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.Scanner; import javax.swing.*; import javax.swing.border.Border; import javax.swing.border.LineBorder; //// import java.net.DatagramSocket; import java.net.DatagramPacket; import java.net.InetAddress; public class guiHello extends JFrame implements ActionListener { private static UdpFunc func; //全局变量:调用udp类的实例化 private static boolean status; //侦听状态改变标志位 private static JLabel label = new JLabel("192.168.0.3:5050"); private static JTextArea ta=new JTextArea(30,80); private JFileChooser jfc=new JFileChooser(new File(".")); private JButton bOpen,bSave; private JButton bListen,bOk,bStop; public guiHello() { super("UDP监听GUI"); JScrollPane ps=new JScrollPane(ta); bOpen=new JButton("选取源文件"); bSave=new JButton("保存变量"); bListen = new JButton("开始监听"); //这个是自定义的按钮 bOk = new JButton("测试按钮"); //自定义两个 JPanel JPanel panel1 = new JPanel(new BorderLayout()); JPanel panel2 = new JPanel(new BorderLayout()); //两个panel第二个背景为红色 panel2.setBackground(Color.red); //panel1.add(bStop, BorderLayout.WEST); panel1.add(bListen, BorderLayout.CENTER); add(panel1); panel2.add(label, BorderLayout.EAST); add(panel2); setLayout(new FlowLayout(FlowLayout.CENTER,10,15)); add(ps); add(bOpen); add(bSave); // add(bListen); add(bOk); Border b = new LineBorder(Color.ORANGE, 2); bListen.setBorder(b); bOpen.addActionListener(this); bSave.addActionListener(this); bListen.addActionListener(this); bOk.addActionListener(this); setVisible(true); setSize(1600,1500); } /* public static void main(String[] args) { // TODO Auto-generated method stub guiHello frm=new guiHello(); frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } */ public void actionPerformed(ActionEvent e) { JButton jbt=(JButton)e.getSource(); if(jbt==bOpen) { int status=jfc.showOpenDialog(this); if(status!=JFileChooser.APPROVE_OPTION) ta.setText("没有选择文件"); else { try{ File file1=jfc.getSelectedFile(); Scanner scan=new Scanner(file1); String info=""; while(scan.hasNext()) { String str=scan.nextLine(); info+=str+"\r\n"; } scan.close(); ta.setText(info); } catch(FileNotFoundException ex){ } } }else if(jbt==bSave){ Save(); }else if(jbt==bListen){ ta.setText("开始监听..."); status =true; //开始监听时为truejbt==bStop func = new UdpFunc(5050); new Thread(new Logic()).start(); }else if(e.getActionCommand().equals("测试按钮")){ ta.setText("按钮bOk"); }else{ ta.setText("未注册变量"); } } //每个按钮对应的函数 private static void Save(){ ta.setText("保存的按钮"); } /* * 逻辑类,主要负责接收报文并显示出来 * * @author ghost * */ private static class Logic implements Runnable { public void run() { //由于类为static,所以监听标志位也为静态变量,根据true flase决定监听线程是否一直开启 while (true) { String message = func.read(); //System.out.println(message); ta.setText(message); } } } }