import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
public class Login extends JFrame implements ActionListener{
JTextField txtUser = new JTextField();
JPasswordField txtPass = new JPasswordField();
JButton loginBtn = new JButton("登陆");
JButton registerBtn = new JButton("注册");
JButton exitBtn = new JButton("退出");
Login(){
this.setSize(250,125);
JPanel upPanel = new JPanel();
upPanel.setLayout(new GridLayout(2,2));
JLabel labUser = new JLabel("用户名");
JLabel labPass = new JLabel("密码");
upPanel.add(labUser);
upPanel.add(txtUser);
upPanel.add(labPass);
upPanel.add(txtPass);
JPanel downPanel = new JPanel();
downPanel.setLayout(new FlowLayout());
downPanel.add(loginBtn);
downPanel.add(registerBtn);
downPanel.add(exitBtn);
this.setLayout(new BorderLayout());
this.add(upPanel,BorderLayout.CENTER);
this.add(downPanel,BorderLayout.SOUTH);
loginBtn.addActionListener(this);
registerBtn.addActionListener(this);
exitBtn.addActionListener(this);
}
public static void main(String args[]){
JFrame m = new Login();
m.setVisible(true);
}
public void actionPerformed(ActionEvent arg0){
if(arg0.getActionCommand().equals("登陆")){
String u = txtUser.getText();
String p = txtPass.getText();
String up = u+"%"+p;
try{
Socket s = new Socket("localhost",8000);
OutputStream os = s.getOutputStream();
OutputStreamWriter osr = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(osr,true);
pw.println(up);
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String flag = br.readLine();
if(flag.equals("true")){
JFrame m = new QQMain();
m.setVisible(true);
}
else{
JOptionPane.showMessageDialog(this,"登陆失败请重新登陆");
}
}
catch(Exception e){
e.printStackTrace();
}
}
if(arg0.getActionCommand().equals("注册")){
System.out.println("注册");
}
if(arg0.getActionCommand().equals("退出")){
System.out.println("退出");
}
}
}
上面的PrintWriter pw = new PrintWiter(osr,true); 会直接刷新流 ;
但是 如果写成 PrintWritr pw= new PrintWriter(osr); pw.println(flag) ; pw.close(); 则会报错 说socket被关闭 .
这个有点不懂 查了PrintWriter 的close方法
public void <strong>close</strong>()
<dl><dd>关闭该流并释放与之关联的所有系统资源。关闭以前关闭的流无效。</dd></dl>
为什么socket也被关闭了??