?? serverthread2.java
字號:
package mychat;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class ServerThread2 extends JFrame implements Runnable{
Socket s;
PrintStream out;
BufferedReader in;
JTextArea jta1,jta2;
JButton jb1,jb2;
JLabel jl;
JPanel jp1,jp2;
JFrame jFrame;
public void run(){
try{
while(true){
getIOStream();
proccessConnection();//————死循環輸出至異常————
closeConnection();
}
}catch(Exception ex){
JOptionPane.showMessageDialog(null, "異常a:"+ex.getMessage());
}
}
public ServerThread2(Socket s){
this.s=s;
jFrame =new JFrame("與 "+s.getInetAddress()+" 會 話 中");
jta1=new JTextArea(20,20);
jta1.setEditable(false);
jta1.setBackground(new Color(204,204,204));
jta2=new JTextArea(10,10);
jta2.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
String temp=KeyEvent.getKeyModifiersText(e.getModifiers()); // 注意獲得組合(控制鍵如alt,ctrl,shift)鍵的方法;e.getKeyModifiersText(e.getKeyModifiers());
String zhj=temp.equals("")?"沒有":temp;
String aj=KeyEvent.getKeyText(e.getKeyCode());/////////////e.getKeyText(e.getKeyCode())
if(zhj.equals("Ctrl")&&aj.equals("Enter")){
String ss=jta2.getText();
sendMessages(ss);
jta2.setText("");
}
}
});
jl=new JLabel(" 聊天內容輸入框:");
jp1=new JPanel();
jb1=new JButton("發送");
jb2=new JButton("關閉");
jp1.setLayout(new FlowLayout());
jp1.setSize(200,10);
jp1.add(jb1);
jp1.add(jb2);
jp2=new JPanel();
jp2.setLayout(new BorderLayout());
jp2.setSize(220,220);
jp2.add(jl,BorderLayout.NORTH);
jp2.add(new JScrollPane(jta2),BorderLayout.CENTER);
jp2.add(jp1,BorderLayout.SOUTH);
System.out.println(s.getInetAddress());
JPanel contentPane=(JPanel)jFrame.getContentPane();
jFrame.setSize(550,550);
contentPane.setLayout(new BorderLayout());
contentPane.add(new JScrollPane(jta1),BorderLayout.NORTH);
contentPane.add(jp2,BorderLayout.CENTER);
jFrame.setLocation(250,20);
jFrame.setVisible(true);
jFrame.setResizable(false);
jFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
jb1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(e.getSource()==jb1){
String ss=jta2.getText();
sendMessages(ss);
jta2.setText("");
}
}
});
jb2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(e.getSource()==jb2){
int i=JOptionPane.showConfirmDialog(null, "確認關聊天閉窗口嗎?", "關閉窗口", JOptionPane.OK_CANCEL_OPTION);
if(i==JOptionPane.OK_OPTION){
out.println("對方已經斷開連接...");
jFrame.dispose();
}
else{
return;
}
}
}
});
}
public void getIOStream(){
try{
out=new PrintStream(s.getOutputStream());
in=new BufferedReader(new InputStreamReader(s.getInputStream()));
jta1.setText("");
jta1.append("監聽連接..."+"\n");
jta1.append("與對方連接成功!"+"\n");
}catch(Exception ex){
JOptionPane.showMessageDialog(null, "異常b:"+ex.getMessage());
}
}
public void proccessConnection(){
out.println("與對方連接成功!");
String temp=null;
//————————利用死循環語句,捕獲對方數據流——————
do{
try{
temp=in.readLine();
jta1.append(temp+"\n");
jta1.setCaretPosition(jta1.getText().length());
temp=temp.toLowerCase();
}catch(Exception ex){
jta1.append("已經斷開連接!");
jta1.setCaretPosition(jta1.getText().length());
break;}
}while(true);
}
public void closeConnection(){
try{
s.close();
out.close();
in.close();
}catch(Exception ex){
JOptionPane.showMessageDialog(null, "異常c:"+ex.getMessage());
}
}
public void sendMessages(String s){
try{
out.println("He say >>>"+s);
jta1.append("You say >>> "+s+"\n");
jta1.setCaretPosition(jta1.getText().length());
}catch(Exception ex){
JOptionPane.showMessageDialog(null, "異常d:"+ex.getMessage());
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -