0
我有代码如下的JProgressBar不能正常工作(可能是由于线程)
public class panel extends JPanel{
String sh;
String su;
String sp;
int sp;
final static int interval = 100;
int i;
Timer timer;
public static JProgressBar pbar;
public int getsport() {
return this.sport;
}
public String getshost() {
return this.shost;
}
public String getsuser() {
return this.suser;
}
public String getspass() {
return this.spass;
}
public panel(){
Dimension size = getPreferredSize();
size.width = 300;//694;
size.height = 200;//600;
setPreferredSize(size);
setBorder(BorderFactory.createTitledBorder("Linux Audit"));
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
JLabel labelhost = new JLabel("Host ");
JLabel labeluser = new JLabel("User name ");
JLabel labelpass = new JLabel("Password ");
JLabel labelport = new JLabel("Pass ");
final JLabel lb = new JLabel();
pbar = new JProgressBar(0, 100);
pbar.setValue(0);
pbar.setStringPainted(true);
pbar.setVisible(false);
final JTextField host = new JTextField(15);
final JTextField user = new JTextField(15);
final JTextField pass=(JTextField)new JPasswordField(15);
final JTextField port = new JTextField(15);
final JButton start = new JButton("Start ");
//layout design
gc.anchor = GridBagConstraints.LINE_END;
gc.weightx = 0.5;
gc.weighty = 0.5;
gc.gridx=0;
gc.gridy=0;
add(labelhost,gc);
gc.gridx=0;
gc.gridy=1;
add(labeluser,gc);
gc.gridx=0;
gc.gridy=2;
add(labelpass,gc);
gc.gridx=0;
gc.gridy=3;
add(labelport,gc);
gc.anchor = GridBagConstraints.LINE_START;
gc.gridx=1;
gc.gridy=0;
add(host,gc);
gc.gridx=1;
gc.gridy=1;
add(user,gc);
gc.gridx=1;
gc.gridy=2;
add(pass,gc);
gc.gridx=1;
gc.gridy=3;
add(port,gc);
gc.anchor = GridBagConstraints.FIRST_LINE_START;
gc.weighty=10;
gc.gridx=1;
gc.gridy=4;
add(start,gc);
gc.gridx=1;
gc.gridy=5;
add(pbar,gc);
gc.gridx=1;
gc.gridy=6;
add(lb,gc);
start.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
///mainFrame.paninst.setVisible(false);
timer.restart();
pbar.setVisible(true);
pbar.setValue(0);
String str = "<html>" + "<font color=\"#008000\">" + "<b>" +
"downloading in progress......." + "</b>" + "</font>" + "</html>";
lb.setText(str);
//connection
String shost = host.getText();
String suser = user.getText();
String spass = pass.getText();
String sportb = port.getText();
int sport = Integer.parseInt(sportb);
hConnection s = new hConnection(shost, suser, spass, sport);
Thread thread = new Thread(s);
thread.setDaemon(true);
thread.start();
}
});
port.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//mainFrame.paninst.setVisible(false);
timer.restart();
pbar.setValue(0);
pbar.setVisible(true);
String str = "<html>" + "<font color=\"#008000\">" + "<b>" +
"Downloading in progress......." + "</b>" + "</font>" + "</html>";
lb.setText(str);
//connection
String shost = host.getText();
String suser = user.getText();
String spass = pass.getText();
String sportb = port.getText();
int sport = Integer.parseInt(sportb);
hConnection s = new hConnection(shost, suser, spass, sport);
Thread thread = new Thread(s);
thread.setDaemon(true);
thread.start();
}});
//Create a timer.
timer = new Timer(interval, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if (i == 100){
Toolkit.getDefaultToolkit().beep();
timer.stop();
pbar.setValue(0);
String str = "<html>" + "<font color=\"#FF0000\">" + "<b>" +
"download completed." + "</b>" + "</font>" + "</html>";
lb.setText(str);
}
i = i + 1; //i++
pbar.setValue(i);
}
});
}
}
,你可以看到我打电话使用新的线程类新hconnection因为在我的主类我已经使用了下面的代码
所以现在的问题是,当我的JProgressBar将首次运行的点击,但是当我再次点击它显示我的进度100,而不是从0开始,甚至没有达到下载完整的代码这是第一次..我可以看到变化的机智欣同一班,但创建新的线程后,它停止..请帮助
谢谢你的回复,但第一次也是100.i猜测和你的建议后,我已经改变它为0,50但没有运气,仍然是问题是一样的。 – user2829506
哦,得到了解决方案..我已经初始化i = 0;再次在按钮现在工作正常....感谢您的答复的方式.. – user2829506
请[接受](http://meta.stackexchange.com/a/65088/155831)答案,如果它有助于解决问题。 –