?? client.java
字號:
package Chat;
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class Client extends JFrame implements Runnable{
private JPanel jPanel = null;
private JLabel jSetServerLabel = null;
private JTextField jServerAddressTextField = null;
private JLabel jSetPortLabel = null;
private JTextField jServerPortTextField = null;
private JButton jConnectButton = null;
private JButton jDisConnectButton = null;
private JLabel jSendLabel = null;
private JTextArea jSendTextArea = null;
private JScrollPane jSendScrollPane = null;
private JTextArea jReceivedTextArea=null;
private JLabel jReceiveLabel = null;
private JScrollPane jReceiveScrollPane = null;
private JButton jSendButton = null;
private JButton jClearButton = null;
private JLabel jStateLabel = null;
private JTextField jStateTextField = null;
private Socket clientSock;
private boolean conState=false;
private PrintWriter out;
private BufferedReader in=null;
private Thread readThread;
private boolean runState;
/**
* @param args
*/
public Client(){
super("通信系統客戶端");
initialize();
//Container con=getContentPane();
}
/**
* This method initializes this
*
*/
private void initialize() {
this.setSize(new Dimension(451, 409));
this.setContentPane(getJPanel());
this.setTitle("通信系統客戶端");
this.setLocation(200, 100);
this.setVisible(true);
}
/**
* This method initializes jPanel
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel() {
if (jPanel == null) {
jStateLabel = new JLabel();
jStateLabel.setBounds(new Rectangle(25, 106, 78, 32));
jStateLabel.setText("系統狀態:");
jReceiveLabel = new JLabel();
jReceiveLabel.setBounds(new Rectangle(25, 236, 78, 24));
jReceiveLabel.setText("信息記錄:");
jSendLabel = new JLabel();
jSendLabel.setBounds(new Rectangle(24, 146, 77, 23));
jSendLabel.setText("發送信息:");
jSetPortLabel = new JLabel();
jSetPortLabel.setBounds(new Rectangle(22, 57, 126, 34));
jSetPortLabel.setText("服務器端口號:");
jSetServerLabel = new JLabel();
jSetServerLabel.setBounds(new Rectangle(22, 14, 126, 34));
jSetServerLabel.setText("服務器端IP地址:");
jPanel = new JPanel();
jPanel.setLayout(null);
jPanel.add(jSetServerLabel, null);
jPanel.add(getJServerAddressTextField(), null);
jPanel.add(jSetPortLabel, null);
jPanel.add(getJServerPortTextField(), null);
jPanel.add(getJConnectButton(), null);
jPanel.add(getJDisConnectButton(), null);
jPanel.add(jSendLabel, null);
jPanel.add(getJSendTextArea(), null);
jPanel.add(getJSendScrollPane(), null);
jPanel.add(jReceiveLabel, null);
jPanel.add(getJReceivedTextArea(), null);
jPanel.add(getJReceiveScrollPane(), null);
jPanel.add(getJSendButton(), null);
jPanel.add(getJClearButton(), null);
jPanel.add(jStateLabel, null);
jPanel.add(getJStateTextField(), null);
}
return jPanel;
}
/**
* This method initializes jServerAddressTextField
*
* @return javax.swing.JTextField
*/
private JTextField getJServerAddressTextField() {
if (jServerAddressTextField == null) {
jServerAddressTextField = new JTextField();
jServerAddressTextField.setBounds(new Rectangle(148, 14, 137, 37));
jServerAddressTextField.setText("127.0.0.1");
}
return jServerAddressTextField;
}
/**
* This method initializes jServerPortTextField
*
* @return javax.swing.JTextField
*/
private JTextField getJServerPortTextField() {
if (jServerPortTextField == null) {
jServerPortTextField = new JTextField();
jServerPortTextField.setBounds(new Rectangle(148, 56, 137, 37));
jServerPortTextField.setText("30000");
}
return jServerPortTextField;
}
/**
* This method initializes jConnectButton
*
* @return javax.swing.JButton
*/
private JButton getJConnectButton() {
if (jConnectButton == null) {
jConnectButton = new JButton();
jConnectButton.setBounds(new Rectangle(315, 14, 100, 33));
jConnectButton.setText("連接服務器");
jConnectButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if(conState==true){
JOptionPane.showMessageDialog(jPanel,"清先斷開連接",
"清先斷開連接",JOptionPane.ERROR_MESSAGE);
}
else{
startConnect();
}
}
});
}
return jConnectButton;
}
/**
* This method initializes jDisConnectButton
*
* @return javax.swing.JButton
*/
private JButton getJDisConnectButton() {
if (jDisConnectButton == null) {
jDisConnectButton = new JButton();
jDisConnectButton.setBounds(new Rectangle(315, 56, 100, 33));
jDisConnectButton.setText("斷開連接");
jDisConnectButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if(conState==false){
JOptionPane.showMessageDialog(jPanel,"還沒有建立連接",
"還沒有建立連接",JOptionPane.ERROR_MESSAGE);
}
else{
try{
out.println("Client exit!");
out.flush();
jReceivedTextArea.insert("\n", 0);
jReceivedTextArea.insert("Client exit!", 0);
//Thread.sleep(1000);
//disConnect();
stopRun();
}catch (Exception exception){
jStateTextField.setText("無法斷開連接");
}
}
}
});
}
return jDisConnectButton;
}
/**
* This method initializes jSendTextArea
*
* @return javax.swing.JTextArea
*/
private JTextArea getJSendTextArea() {
if (jSendTextArea == null) {
jSendTextArea = new JTextArea();
//jSendTextArea.setBounds(new Rectangle(222, 208, 73, 43));
/*
jSendTextArea.addKeyListener(
new java.awt.event.KeyListener(){
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==e.VK_ENTER){
if(jSendTextArea.getText().equals("")){
JOptionPane.showMessageDialog(jPanel,"輸入內容為空",
"輸入內容為空",JOptionPane.ERROR_MESSAGE);
}
else if(conState==true){
sendInformation();
jSendTextArea.setText("");
}
else{
JOptionPane.showMessageDialog(jPanel,"還沒有連接客戶端",
"還沒有連接客戶端",JOptionPane.ERROR_MESSAGE);
}
}
}
public void keyReleased(KeyEvent e){
}
public void keyTyped(KeyEvent e){
}
}
);
*/
}
return jSendTextArea;
}
private JTextArea getJReceivedTextArea(){
if (jReceivedTextArea == null) {
jReceivedTextArea = new JTextArea();
//jSendTextArea.setBounds(new Rectangle(222, 208, 73, 43));
}
return jReceivedTextArea;
}
/**
* This method initializes jSendScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJSendScrollPane() {
if (jSendScrollPane == null) {
jSendScrollPane = new JScrollPane(jSendTextArea);
jSendScrollPane.setBounds(new Rectangle(23, 169, 279, 56));
}
return jSendScrollPane;
}
/**
* This method initializes jReceiveScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJReceiveScrollPane() {
if (jReceiveScrollPane == null) {
jReceiveScrollPane = new JScrollPane(jReceivedTextArea);
jReceiveScrollPane.setBounds(new Rectangle(24, 260, 397, 102));
}
return jReceiveScrollPane;
}
/**
* This method initializes jSendButton
*
* @return javax.swing.JButton
*/
private JButton getJSendButton() {
if (jSendButton == null) {
jSendButton = new JButton();
jSendButton.setBounds(new Rectangle(318, 171, 75, 24));
jSendButton.setText("發送");
jSendButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if(jSendTextArea.getText().equals("")){
JOptionPane.showMessageDialog(jPanel,"輸入內容為空",
"輸入內容為空",JOptionPane.ERROR_MESSAGE);
}
else if(conState==true){
sendInformation();
jSendTextArea.setText("");
}
else{
JOptionPane.showMessageDialog(jPanel,"還沒有連接服務器端",
"還沒有連接服務器端",JOptionPane.ERROR_MESSAGE);
}
}
});
}
return jSendButton;
}
/**
* This method initializes jClearButton
*
* @return javax.swing.JButton
*/
private JButton getJClearButton() {
if (jClearButton == null) {
jClearButton = new JButton();
jClearButton.setBounds(new Rectangle(318, 200, 75, 24));
jClearButton.setText("清空");
jClearButton.addActionListener(
new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
jReceivedTextArea.setText("");
}
}
);
}
return jClearButton;
}
/**
* This method initializes jStateTextField
*
* @return javax.swing.JTextField
*/
private JTextField getJStateTextField() {
if (jStateTextField == null) {
jStateTextField = new JTextField();
jStateTextField.setBounds(new Rectangle(102, 107, 315, 31));
jStateTextField.setText("準備就緒,等待連接");
jStateTextField.setEditable(false);
}
return jStateTextField;
}
public void startConnect(){
try{
clientSock=new Socket(jServerAddressTextField.getText(),
Integer.parseInt(jServerPortTextField.getText()) );
jStateTextField.setText("連接服務器成功,服務器:"+jServerAddressTextField.getText());
conState=true;
in=new BufferedReader(new InputStreamReader(clientSock.getInputStream()));
out=new PrintWriter(clientSock.getOutputStream());
}catch (Exception exception){
// exception.printStackTrace();
jStateTextField.setText("連接未成功建立,請重新嘗試");
conState=false;
repaint();
}
//run();
readThread=new Thread(this);
readThread.start();
}
public void run(){
String msg;
runState=true;
while(runState){
try{
msg=in.readLine();
// System.out.println(msg);
if(msg.equals("Server exit!")){//server exit
processMsg(msg);
stopRun();//終止線程
}else if(msg!=null){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str =(df.format(new Date()));
processMsg("Server: "+str+"\n"+msg);
}
Thread.sleep(500);
}
catch(Exception e){
}
}
//System.out.println("11111111111");
//endConnect();
try{//服務器退出關閉連接和相關的"流"
// System.out.println("11111111111");
jStateTextField.setText("斷開連接");
clientSock.close();
clientSock=null;
conState=false;
in.close();
out.close();
}
catch(IOException ioe){}
}
public void processMsg(String msg){//客戶端處理消息
//jReceivedTextArea.append(msg);
//jReceivedTextArea.append("\n");
jReceivedTextArea.insert("\n", 0);
jReceivedTextArea.insert(msg, 0);
}
public void sendInformation(){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str =(df.format(new Date()));
out.println(jSendTextArea.getText());
processMsg("clent: "+str+"\n"+jSendTextArea.getText());
out.flush();
}
public void stopRun(){//to stop the running thread
runState=false;
conState=false;
// disConnect();
}
/*
public void disConnect(){
try{
jStateTextField.setText("斷開連接");
clientSock.close();
clientSock=null;
conState=false;
}catch (Exception exception){
jStateTextField.setText("無法斷開連接");
}
}
*/
public static void main(String[] args) {
// TODO 自動生成方法存根
Client client=new Client();
client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
} // @jve:decl-index=0:visual-constraint="10,10"
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -