2013-10-03 42 views
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开始,甚至没有达到下载完整的代码这是第一次..我可以看到变化的机智欣同一班,但创建新的线程后,它停止..请帮助

回答

1

你永远不会重置运行之间的i变量。这意味着第二次运行,i已经是100(更大)

+0

谢谢你的回复,但第一次也是100.i猜测和你的建议后,我已经改变它为0,50但没有运气,仍然是问题是一样的。 – user2829506

+0

哦,得到了解决方案..我已经初始化i = 0;再次在按钮现在工作正常....感谢您的答复的方式.. – user2829506

+0

请[接受](http://meta.stackexchange.com/a/65088/155831)答案,如果它有助于解决问题。 –