У меня есть код следующего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
спасибо за ответ, но в первый раз также стоит 100.и догадка, и после предложения ура я изменил его на 0,50, но не повезло, проблема такая же .. – user2829506
oh получил решение..и инициализировал i = 0; снова в пределах кнопок теперь работает нормально .... спасибо за ответ, кстати .. – user2829506
Пожалуйста, [примите] (http://meta.stackexchange.com/a/65088/155831) ответ, если он помог решить проблему. –