国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

大學JAVA實驗五

2019-11-17 04:05:05
字體:
來源:轉載
供稿:網友
指定不同協議的URL地址,獲得資源文件的內容和屬性

URLStudy.java

package first;

import java.awt.FileDialog;
import java.awt.Font;
import java.awt.TextArea;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PRintWriter;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class URLStudy extends JFrame {

private static final long serialVersionUID = 1L;
private Font font = new Font("宋體", Font.CENTER_BASELINE, 13);
TextArea textarea = new TextArea();
JButton button[] = new JButton[3];
String buttonName[] = { "確定", "取消", "保存文件" };
JLabel label = new JLabel("請輸入URL地址:");
JTextField urlfield = new JTextField(20);

JPanel panel = new JPanel();

URLStudyListener listener = new URLStudyListener(this);

private String file = "";

private FileDialog filesave;

public URLStudy() {
   
  super.setTitle("資源文件的內容和屬性查看器");
  
  ImageIcon icon = new ImageIcon("195032.jpg");
  setIconImage(icon.getImage());
  
  textarea.setFont(font);
  label.setFont(font);
  urlfield.setFont(font);
  
  panel.add(label);
  panel.add(urlfield);

  for (int i = 0; i < buttonName.length; i++) {
   button[i] = new JButton(buttonName[i]);
   button[i].addActionListener(listener);
   button[i].setFont(font);
   panel.add(button[i]);
  }
  super.setDefaultCloSEOperation(EXIT_ON_CLOSE);
  super.add(textarea, "Center");
  super.add(panel, "South");
  super.setLocation(250, 200);
  super.setSize(600, 400);
  super.setVisible(true);
  super.setResizable(true);
  
  
  filesave = new FileDialog(this, "保存文件-----XiaoHuanJie", FileDialog.SAVE);
}

public void saveFile() {
  String dangqianwenjian = textarea.getText();
  try {
   if (file.isEmpty()) {
    filesave.setVisible(true);
    String direct = filesave.getDirectory();
    String filename = filesave.getFile();

    if ((direct != null) && (filename != null)) {
     file = direct + filename;
     PrintWriter pw = new PrintWriter(new FileWriter(file));
     pw.println(dangqianwenjian);
     pw.flush();
     pw.close();
    }
   } else {
    PrintWriter pw = new PrintWriter(new FileWriter(file));
    pw.println(dangqianwenjian);
    pw.flush();
    pw.close();
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
}

public static void main(String[] args) {
  new URLStudy();
}
}


URLStudyListener.java

package first;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

import javax.swing.JOptionPane;

public class URLStudyListener implements ActionListener {
BufferedReader br;
URLStudy urlstudy;

public URLStudyListener(URLStudy urlstudy) {
  this.urlstudy = urlstudy;
}

@Override
public void actionPerformed(ActionEvent ae) {
  String command = ae.getActionCommand();
  if (command.equals("確定")) {
   try {
    URL url = new URL(((urlstudy.urlfield).getText()).trim());
    br = new BufferedReader(new InputStreamReader(url.openStream()));
    while (br.readLine() != null) {
     urlstudy.textarea.append(br.readLine() + "/n");
    }
   } catch (IOException e) {

    JOptionPane.showMessageDialog(null, "您輸入的URL地址錯誤!", "系統提示",
      JOptionPane.ERROR_MESSAGE);

   }
  } else if (command.equals("取消")) {
   (urlstudy.urlfield).setText("");
  } else if (command.equals("保存文件")) {
   urlstudy.saveFile();
  }
}
}


(1)增加上線功能。離線后,將【離線】按鈕變成【上線】按鈕,單擊可再次申請建立連接。
(2)將文本區中對方和己方的字符串以不同的字體區別顯示。
(3)發送帶格式的字符串。
(4)增加復制功能,將文本區中的若干選中字符串復制到文本行中。
(5)增加若干圖標作為表情,發送表情圖標。
(6)增加對方信息到達時的語音提示。
(7)將聊天記錄存儲到文件中。

MyQQServer.java

package second;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Hashtable;

public class MyQQServer {

public static void main(String[] args) {
  Hashtable<String, DataOutputStream> userList = new Hashtable<String, DataOutputStream>();
  String name;
  DataInputStream dis;
  DataOutputStream dos;

  try {
   ServerSocket serversocket = new ServerSocket(8088);
   while (true) {
    Socket socket = serversocket.accept();
    dis = new DataInputStream(socket.getInputStream());
    dos = new DataOutputStream(socket.getOutputStream());

    name = dis.readUTF();

    userList.put(name, dos);

    new QQServerReader(name, dis, userList).start();
   }
  } catch (IOException e) {

   e.printStackTrace();
  }
}
}

class QQServerReader extends Thread {

private String name;
private DataInputStream dis;

private Hashtable<String, DataOutputStream> userList;

public QQServerReader(String name, DataInputStream dis,
   Hashtable<String, DataOutputStream> userList) {
  // super();
  this.name = name;
  this.dis = dis;
  this.userList = userList;
}

@Override
public void run() {
  String info;
  Date date1 = new Date();
  SimpleDateFormat sdf1 = new SimpleDateFormat("yy-MM-dd  HH:mm:ss");
  String time = "/t/t" + sdf1.format(date1);

  transmitMessage(name + " 上線 !", "-------系統消息-------" + time);
  
  while (true) {

   try {

    info = dis.readUTF();
    if (info.equals("^%#$^$jg4653|+=--09-89jh)*")) {// 暗號吻合,該用戶退出聊天室
     DataOutputStream dos = (DataOutputStream) userList
       .get(name);

     dos.close();
     dis.close();
     userList.remove(name);
     Date date2 = new Date();
     SimpleDateFormat sdf2 = new SimpleDateFormat(
       "yy-MM-dd  HH:mm:ss");
     time = "/t/t" + sdf2.format(date2);

     transmitMessage(name + " 退出聊天室啦 !", "-------系統提示-------"
       + time);
     break;
    } else if (info.equals("L^%#$5@#h(8yh^+_)_)(=78UTh*%@!")) {// 暗號吻合,該用戶離線
     //info = "";
     userList.remove(name);
     Date date2 = new Date();
     SimpleDateFormat sdf2 = new SimpleDateFormat(
       "yy-MM-dd  HH:mm:ss");
     time = "/t/t" + sdf2.format(date2);

     transmitMessage(name + " 離線 !", "-------系統提示-------" + time);
     break;
    } else if (info.equals("^&%()&(*85KJ$%@+_9)(80(8()*)(")) {// 暗號吻合,該用戶重新上線
     DataOutputStream dos = (DataOutputStream) userList
       .get(name);
     userList.put(name, dos);
    } else if (info.length() > 0) {
     Date date3 = new Date();
     SimpleDateFormat sdf3 = new SimpleDateFormat(
       "yy-MM-dd  HH:mm:ss");
     time = "/t/t" + sdf3.format(date3);

     transmitMessage(info, name + time);
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
}

public void transmitMessage(String msg, String name) {
  Collection<DataOutputStream> doses = userList.values();
  DataOutputStream dos;

  // 把信息發送給所有在線的用戶
  for (Object o : doses) {
   dos = (DataOutputStream) o;
   try {
    dos.writeUTF(name + "/n" + msg + "/n");
   } catch (IOException e) {

    e.printStackTrace();
   }
  }
}

}


MyQQClient.java

package second;

import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class MyQQClient {

private String name;
private Socket socket;
private DataInputStream dis;
private DataOutputStream dos;
JFrame frame;
private TextArea oldInfoArea;
private TextArea newInfoArea;
private boolean runnable=true;
private Font font;

private File file;

ImageIcon icon;

JButton button[] = new JButton[4];

public MyQQClient() {

  runnable = true;
  frame = new JFrame("QQ客戶端");

  icon = new ImageIcon("195032.jpg");
  frame.setIconImage(icon.getImage());

  oldInfoArea = new TextArea(15, 20);
  oldInfoArea.setEditable(false);
  newInfoArea = new TextArea(8,20);

  font = new Font("宋體", Font.CENTER_BASELINE, 13);
  oldInfoArea.setFont(font);
  newInfoArea.setFont(font);
  MyQQKeyListener keylistener =new MyQQKeyListener(this);
  
  newInfoArea.addKeyListener(keylistener);
  
  MyQQClientListener listener = new MyQQClientListener(this);

  String buttonName[] = { "表情", "離線", "聊天記錄", "發送" };

  Panel panel = new Panel();
  panel.setLayout(new GridLayout(1, 4));

  for (int i = 0; i < buttonName.length; i++) {
   button[i] = new JButton(buttonName[i]);
   button[i].setFont(font);
   button[i].addActionListener(listener);
   panel.add(button[i]);
  }

  frame.add(this.oldInfoArea, "North");
  frame.add(this.newInfoArea, "Center");
  frame.add(panel, "South");

  frame.addWindowListener(new WindowAdapter() {

   @Override
   public void windowClosing(WindowEvent e) {

    int option = JOptionPane.showConfirmDialog(null, "是否完全退出此次聊天?",
      "系統提示", JOptionPane.YES_NO_OPTION,
      JOptionPane.QUESTION_MESSAGE);
    if (option == JOptionPane.YES_OPTION)
     // System.exit(0);
     MyQQClient.this.shutDown();
   }
  });

  frame.setSize(500, 400);
  frame.setLocation(300, 200);
  frame.setResizable(false);

}

public static void main(String[] args) {
  MyQQClient QQClient = new MyQQClient();
  QQClient.inputName();
  QQClient.connect();
  QQClient.createThread();

}

public void saveFile() {
  String oldInfo = oldInfoArea.getText();
  try {
   PrintWriter pw = new PrintWriter(new FileWriter(file, true));// true,不覆蓋已有文件

   pw.println(oldInfo);
   pw.flush();
   pw.close();
  } catch (IOException e) {
   e.printStackTrace();
  }

}

// 檢查是否存在目標文件,不存在就新建一個
public void init() {
  if (file == null) {
   file = new File(name + ".employee");
   try {
    file.createNewFile();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
}

public void xiaXian() {
  try {
   dos.writeUTF("L^%#$5@#h(8yh^+_)_)(=78UTh*%@!");// 暗號, 告訴服務器,離線了
   this.runnable=false;
  } catch (IOException e) {
   e.printStackTrace();
  }
}

public void shangXian() {
  try {
   this.runnable=true;
   this.connect();
   dos.writeUTF("^&%()&(*85KJ$%@+_9)(80(8()*)(");// 暗號, 告訴服務器,重新上線
  } catch (IOException e) {
   e.printStackTrace();
  }
}

public void shutDown() {
  try {
   dos.writeUTF("^%#$^$jg4653|+=--09-89jh)*");// 暗號, 告訴服務器,下線了
   Thread.sleep(500);
   saveFile();// 退出時將聊天記錄一次性保存
   this.stop();

   //dis.close();
   dos.close();
   this.socket.close();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  System.exit(0);// 聊天窗口退出
}

public void connect() {
  try {
   socket = new Socket("127.0.0.1", 8088);
  } catch (UnknownHostException e1) {
   System.out.println("連接服務器失敗!");
   e1.printStackTrace();
  } catch (IOException e1) {
   e1.printStackTrace();
  }
  try {
   dos = new DataOutputStream(socket.getOutputStream());
   dis = new DataInputStream(socket.getInputStream());
   dos.writeUTF(name);// 將本用戶的姓名發送給服務器
  } catch (IOException e) {
   e.printStackTrace();
  }
}

public void createThread() {
  MyQQClientReader reader = new MyQQClientReader(this);
  reader.start();
}

public void inputName() {

  String name = (javax.swing.JOptionPane.showInputDialog("請輸入您的昵稱:"))
    .trim();
  if (name == null || name.equals("")) {// 不接受散客聊天
   JOptionPane.showMessageDialog(null, "昵稱不能為空哦,請輸入您的昵稱!", "系統提示",
     JOptionPane.ERROR_MESSAGE);

   inputName();

  } else {
   this.setName(name);
  }
  init();
  frame.setTitle(name);
  frame.setVisible(true);
}

public void stop() {
  runnable = false;
}

public boolean isRunnable() {
  return runnable;
}

public DataInputStream getDis() {
  return dis;
}

public DataOutputStream getDos() {
  return dos;
}

public TextArea getOldTextArea() {
  return oldInfoArea;
}

public TextArea getNewTextArea() {
  return newInfoArea;
}

public void setName(String name) {
  this.name = name;
}

}


MyQQClientListener.java

package second;

import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

//MyQQClientLister監聽器
class MyQQClientListener implements ActionListener {
MyQQClient myQQClient;
String command ;

public MyQQClientListener(MyQQClient myQQClient) {
  this.myQQClient = myQQClient;
}

public void actionPerformed(ActionEvent ae) {
  command = ae.getActionCommand();
  if (command.equals("發送")) {

   TextArea textArea = myQQClient.getNewTextArea();
   String info = textArea.getText();

   try {
    myQQClient.getDos().writeUTF(info);
   } catch (IOException e1) {
    e1.printStackTrace();
   }

   textArea.setText("");
   textArea.requestFocus();
  } else if (command.equals("離線")) {
   myQQClient.button[1].setText("上線");
   myQQClient.xiaXian();
  } else if (command.equals("上線")) {
   myQQClient.button[1].setText("離線");
   myQQClient.shangXian();
  }else if(command.equals("聊天記錄")){
   
  }
}
}


MyQQKeyListener.java

package second;

import java.awt.TextArea;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;

public class MyQQKeyListener implements KeyListener {
MyQQClient myQQClient;

MyQQClientListener myQQClientListener;

public MyQQKeyListener(MyQQClientListener myQQClientListener) {
  this.myQQClientListener = myQQClientListener;
}

public MyQQKeyListener(MyQQClient myQQClient) {
  this.myQQClient = myQQClient;
}

@Override
public void keyPressed(KeyEvent ke) {
  if (ke.getKeyCode() == KeyEvent.VK_ENTER && ke.isControlDown()) {
   TextArea textArea = myQQClient.getNewTextArea();
   String info = textArea.getText();

   try {
    myQQClient.getDos().writeUTF(info);
   } catch (IOException e1) {
    e1.printStackTrace();
   }

   textArea.setText("");
   textArea.requestFocus();
  }
}

@Override
public void keyReleased(KeyEvent e) {

}

@Override
public void keyTyped(KeyEvent e) {

}
}

MyQQClientReader.java


package second;

import java.awt.Color;
import java.awt.TextArea;
import java.io.DataInputStream;
import java.io.IOException;

class MyQQClientReader extends Thread {

private MyQQClient myQQClient;

public MyQQClientReader(MyQQClient myQQClient) {
  this.myQQClient = myQQClient;
}

@Override
public void run() {
  String info;

  int a = (int) (Math.random() * 255);
  int b = (int) (Math.random() * 255);
  int c = (int) (Math.random() * 255);

  Color color = new Color(a, b, c);

  DataInputStream dis = myQQClient.getDis();
  TextArea textArea = myQQClient.getOldTextArea();
  textArea.setForeground(color);

  try {
   while (myQQClient.isRunnable()) {

    info = dis.readUTF();
    textArea.append(info + "/n");
   }
  } catch (IOException e) {
    //e.printStackTrace();//有錯誤
  }
}
}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西青区| 徐州市| 汪清县| 深泽县| 莱阳市| 南平市| 大庆市| 龙陵县| 曲松县| 垫江县| 额济纳旗| 那坡县| 山阳县| 宣威市| 九龙城区| 金平| 申扎县| 始兴县| 芜湖县| 浠水县| 永德县| 郎溪县| 肃南| 乌审旗| 龙山县| 剑阁县| 卓尼县| 丹阳市| 鹤峰县| 嵩明县| 广汉市| 黄冈市| 云和县| 禹州市| 鹤岗市| 金沙县| 桐城市| 中江县| 霍林郭勒市| 固镇县| 昌乐县|