我正在用java编写聊天程序
特别是,我在登录过程中遇到了问题。
这是代码
ClientBackground.java
package client;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ClientGui extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
String msg;
JTextArea jta = new JTextArea(40, 25);
private JTextField jtf = new JTextField(25);
private ClientBackground client;
public ClientGui() {
add(jta, BorderLayout.CENTER);
add(jtf, BorderLayout.SOUTH);
jtf.addActionListener(this);
jta.setEditable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setBounds(800, 100, 400, 600);
setTitle("client");
}
@Override
public void actionPerformed(ActionEvent e) {
String msg = client.id+ ":" + jtf.getText()+"\n";
client.sendMessage(msg);
jtf.setText("");
}
public void Clientback(ClientBackground client) {
this.client = client;
}
public void appendMsg(String msg) {
jta.append(msg);
}
}
clientgui.java
package client;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.StringTokenizer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class login_Frame extends JFrame{
private static final long serialVersionUID = 1L;
private String id;
private String pass;
JButton logb = new JButton("login");
JButton exitb = new JButton("cancel");
JLabel idlb = new JLabel("ID : ");
JLabel pwlb = new JLabel("PW : ");
JTextField idtb = new JTextField();
JTextField pwtb = new JTextField();
private ClientBackground client;
private DataInputStream in;
boolean test;
String packet,tmp;
public login_Frame(){
new Thread(client).start();
getContentPane().add(logb);
getContentPane().add(exitb);
getContentPane().add(idlb);
getContentPane().add(pwlb);
getContentPane().add(idtb);
getContentPane().add(pwtb);
setLayout(null);
setBounds(100, 100, 400, 200);
setVisible(true);
logb.setBounds(100, 110, 90, 40);
exitb.setBounds(210, 110, 90, 40);
idlb.setBounds(20, 10, 50, 40);
pwlb.setBounds(20, 60, 50, 40);
idtb.setBounds(70, 10, 280, 40);
pwtb.setBounds(70, 60, 280, 40);
ActionListener confirmListener = new ConfirmListener();
ActionListener exListener = new ExitListener();
logb.addActionListener(confirmListener);
exitb.addActionListener(exListener);
idtb.addActionListener(confirmListener);
pwtb.addActionListener(confirmListener);
}
public String getidtb(){
return idtb.getText();
}
public String getpwtb(){
return pwtb.getText();
}
private class ConfirmListener implements ActionListener {
public void actionPerformed(ActionEvent e){
isLoginCheck();
}
}
private class ExitListener implements ActionListener {
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}
public void Clientback(ClientBackground client) {
this.client = client;
}
public void isLoginCheck(){
id = getidtb();
pass = getpwtb();
idtb.setText("");
pwtb.setText("");
client.setid(id, pass);
client.sendMessage(id+"/"+pass);
if(test){
client.showFrameTest();
this.dispose();
}
else{
JOptionPane.showMessageDialog(null, "wrong.");
}
}
}
login_frame.java
false
这是我的情景, 我执行clientBackground.java。 然后,将出现login_frame。 我会写id,pw。我将点击登录按钮。 然后,将执行登录进程(在clientbackground.java中)。 所以,islogin值将被决定。 在login_frame中将检查islogin值。
但是,如果我点击登录按钮,总是错误的消息......
我想检查登录时更改login_frame的测试(布尔值)。
但值始终为sendBuffer()
。我该怎么办?