【发布时间】:2012-05-14 18:14:02
【问题描述】:
所以这里是代码。 我想要做的 - 是与服务器的客户端循环,以从服务器获取消息,有时会发送它们。 这是定时器的尝试。
private MessageFrame mf;
private User us;
private Contact cn;
private Socket s;
private PrintStream ps;
private BufferedReader br;
private Timer timer ;
public MessageFrameListener(MessageFrame m_f, User u_s, Contact c_n){
timer = new Timer(500,new timerListener());
mf = m_f;
us = u_s;
cn = c_n;
m_f.addButtonListener(new SButtonListener());
m_f.addWinListener(new FrameListener());
}
public void init(){
try {
s = new Socket(InetAddress.getLocalHost(), 8072);
ps = new PrintStream(s.getOutputStream());
br = new BufferedReader( new InputStreamReader(s.getInputStream()));
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
timer.start();
}
public class timerListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
//String insert = mf.getInput();
String result;
try {
//проверить, что буфер не пуст
if((result = br.readLine()) != null){
String[] results = result.split(" ");
if("m".equals(results[0])){
if("-1".equals(results[2]))
mf.addLine2("Error");
else{
mf.addLine2(results[3]);
}
}
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
但是当我运行它时 - 程序停止对我的行为做出反应。 我不能写文字,也不能按下按钮。
【问题讨论】:
-
您可能正在事件调度线程 (EDT) 上运行您的套接字,您可能应该将其移至 SwingWorker
-
@GuillaumePolet 这应该是一个答案。考虑到这是正确的答案。
-
这是关于 SO 的每三十个问题中就有一个具有完全相同的解决方案:)
-
@trutheality 我没有足够的信息来做出肯定和回答。所以我想我可以让 OP 朝着好的方向发展。我想我今天早上刚刚发布了一个用 Socket 冻结 GUI 的答案。所以从那里开始,如果这是他的问题,他应该找到自己的方式。
-
//проверить, что буфер не пуст请用英文编码 cmets。谷歌翻译告诉我这意味着“检查缓冲区不为空”。 (如果不确定翻译,您可以在发布之前使用翻译服务。)