线程有时不会“运行”

时间:2018-11-06 13:55:35

标签: java

@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时都会更新

0 个答案:

没有答案