2013-10-03 1 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 используя новую нить, потому что в моем главном классе я использовал следующий код

public class download { 
    public static void main(String[] arg){ 

SwingUtilities.invokeLater(new Runnable(){ 
    public void run(){ 
    JFrame frame = new mainFrame("download"); 
    frame.setVisible(true); 
    frame.setSize(700,600); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    //frame.setResizable(false); 

    } 
}); 

} 
} 

так что теперь проблема, когда я нажимаю на JProgressBar он будет работать в первый раз, но когда я нажимаю его снова показывает мне ход 100, а не начиная с 0 и даже не доходя до загрузки полного кода которое было в первый раз. Я вижу, как меняется малейший остроумие hin тот же класс, но после создания новой нити он остановится. help

ответ

1

Вы никогда не перезагружаете переменную i между прогонами. Это означает, что во втором прогоне i уже 100 (больше)

+0

спасибо за ответ, но в первый раз также стоит 100.и догадка, и после предложения ура я изменил его на 0,50, но не повезло, проблема такая же .. – user2829506

+0

oh получил решение..и инициализировал i = 0; снова в пределах кнопок теперь работает нормально .... спасибо за ответ, кстати .. – user2829506

+0

Пожалуйста, [примите] (http://meta.stackexchange.com/a/65088/155831) ответ, если он помог решить проблему. –