当我在客户端上单击按钮时,我正在尝试从服务器读取数据。
问题在于,当我单击有readLine()的按钮时,此指令不仅会阻止其后的代码(如我预期的那样),还会阻止先前的代码。
不要诅咒我,但是我正在为此项目使用NetBeans GUI Builder。
发生这种情况的动作监听器有两个,这是客户端之一:
private void buyTicketButtonActionPerformed(java.awt.event.ActionEvent evt) {
try {
spawnLabel.setIcon(new javax.swing.ImageIcon(getClass().
getResource("/giocatore/ticketGreen.png")));
buyTicketButton.setEnabled(false);
ArrayList<Integer> table = new ArrayList();
//Adds numbers 1 to 90 to the array
for (int i = 1; i<=90; i++){
table.add(i);
}
//Shuffles the array randomly
Collections.shuffle(table);
for(int i = 0; i<15; i++){
nums.get(i).setText(Integer.toString(table.get(i)));
}
out.println("ready");
while((read = in.readLine())!=null){
//read = in.readLine();
System.out.println(read);
}
} catch (IOException ex) {
Logger.getLogger(Giocatore.class.getName()).log(Level.SEVERE, null, ex);
}
}
此按钮的作用是:
真正发生的是,程序被readLine()命令阻塞,而之前发生的所有事情都被忽略了,因为out.println(“ ready”);到达服务器。
为什么会这样?有什么办法可以解决?
编辑:使用swingworker解决