本人java新手,现有一个界面,界面有个按钮和label,点了按钮后执行一些操作,在执行操作过程中给界面的label赋值,为什么只能显示最后一个?
- Java code
public class M3 { public void Time1(Object obj) { int i = 0; while (true) { if (i == 5) break; if (obj instanceof AAA) { AAA a = (AAA) obj; a.label.setText("this is " + i); a.setTitle("this is " + i); System.out.println("this is " + i); try { Thread.sleep(5000); } catch (Exception ex) { System.out.println(ex.toString()); } } i++; } }}import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JLabel;import javax.swing.JPanel;public class AAA extends JDialog{ JLabel label; JButton b; public AAA() { setBounds(100, 100, 400, 130); Container contentPanel = getContentPane(); label = new JLabel("", JLabel.CENTER); JPanel panel = new JPanel(); b = new JButton("安装"); b.setForeground(Color.blue); b.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub execute(); } }); panel.add(b); contentPanel.add(panel, BorderLayout.NORTH); contentPanel.add(label, BorderLayout.SOUTH); setVisible(true); } void execute(){ M3 m3=new M3(); m3.Time1(this); //this.dispose(); } public static void main(String[] args) { AAA app = new AAA(); }}
------解决方案--------------------
这是典型的SWIGN线程模型的问题,你如果是要做一些定时的操作,建议用javax.swing.Timer来做,由Timer完成线程同步,这样不会出现上面的问题
------解决方案--------------------
a.label.setText("this is " + i);
a.setTitle("this is " + i);
每次读就被覆盖了,肯定就剩最后一个了。
String s = "";
s += i;
label.setText("this is " + s);