@Override
public synchronized void run() {
while(!interrupted()){
String msg;
try {
String s = ut.getText();
//while(s.isEmpty() || s.equals("")){
//sleep(1000);
// break;
// }
String v[] = s.split(" ");
switch (v[0]){
case "INSC":
if(v.length==4 && ut.getEstado()==0){
out.println(s);
ut.setEstado(1);
ut.sendMessage("Server: Utilizador inscrito.");
}
else
ut.sendMessage("Server: Invalido!");
break;
case "CLT":
if(ut.getEstado()==1) {
out.println(s);
ut.setEstado(1);
while((msg = in.readLine())!= null){
System.out.println(msg);
ut.sendMessage("Server: " + msg);
if(!in.ready())
break;
}
}
else
ut.sendMessage("Server: Invalido!");
break;
case "":
break;
default:
ut.sendMessage("Server: Invalido!");
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
所以我有这个线程,并且大多数时候它都能正常运行,它获取字符串s并执行其在代码中的作用,但有时它读取该字符串却不执行任何操作,甚至没有任何情况,它似乎只是跳过了所有内容然后等待下一个字符串。 有任何建议或需要更多背景信息吗?
public class Utilizador {
private String nome;
private String endereco;
private int porto;
private int estado;
private JFrame frame;
private JTextArea area;
private JTextField text;
private String temporary;
public Utilizador(String nome, String endereco, int porto) {
this.nome = nome;
this.endereco = endereco;
this.porto = porto;
estado = 0;
}
private void creatChat() {
area = new JTextArea(17,20);
text = new JTextField();
frame = new JFrame("Utilizador");
temporary = ("");
JScrollPane scroll = new JScrollPane(area);
scroll.getVerticalScrollBar().setPreferredSize(new Dimension(0,0));
DefaultCaret caret = (DefaultCaret)area.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
frame.add(scroll,BorderLayout.NORTH);
frame.add(text);
area.setEditable(false);
frame.setResizable(false);
area.append("Utilizador Conectado!\n");
text.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String s = text.getText();
if(!s.equals("")){
sendMessage("\nUtilizador: "+ s +"\n");
text.setText("");
temporary=s;
}
}
}
);
}
private void open(){
frame.pack();
frame.setLocationRelativeTo(null);//centro
frame.setVisible(true);
}
private void openchat(){
creatChat();
open();
}
public void sendMessage(String s){
area.append(s +"\n");
}
public String getText(){
String s = temporary;
temporary = "";
return s;
}
public String getNome() {
return nome;
}
public String getEndereco() {
return endereco;
}
public int getPorto() {
return porto;
}
public int getEstado(){
return estado;
}
public void setEstado(int e){
estado = e;
}
public static void main(String[] args) throws UnknownHostException, IOException {
Utilizador ut = new Utilizador("2134", "23145",24);
ut.openchat();
Socket socket = new Socket("127.0.0.1", Diretorio.getInstance().getPorto());
UtilizadorThread t = new UtilizadorThread(socket, ut);
t.start();
}
添加了一些上下文,它是一个服务器-客户端,并且我进行了快速聊天,每次按Enter时都会更新