如何显示进度条? Java多线程

时间:2018-09-26 01:48:55

标签: java multithreading swing compiler-errors jprogressbar

我是Java的初学者,所以很抱歉如果我问一个愚蠢的问题,但是如何在gui类中创建一个新线程来创建进度条。我有一个名为progress的类,并使用创建的构造函数在gui类中创建了一个新线程。但是由于某种原因,我遇到了一个奇怪的错误:

"constructor progress in class NewJFrame.progress cannot be applied to given types;
  required: no arguments
  found: JProgressBar
  reason: actual and formal argument lists differ in length   

NewJframe.java

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
           if (jRadioButton1.isSelected()){   

          App m = new App();


      Thread t1 = new Thread(new progress(jProgressBar1));
      m.sendPingRequest2("104.160.142.3",jTextPane1,jTextPane2,jTextField1);


} 
    }    

progress.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author User
 */


import javax.swing.JProgressBar;
public class progress implements Runnable {


      private static int DELAY = 500;


  JProgressBar progressBar;



  public  progress (JProgressBar bar) {
    progressBar = bar;
  }


  public void run() {
    int minimum = progressBar.getMinimum();
    int maximum = progressBar.getMaximum();
    for (int i = minimum; i < maximum; i++) {
      try {
        int value = progressBar.getValue();
        progressBar.setValue(value + 1);

        Thread.sleep(DELAY);
      } catch (InterruptedException ignoredException) {
      }
    }
  }
}

1 个答案:

答案 0 :(得分:2)

此:

Apache markdown

应该是:

Thread t1= new progress ( jProgressBar1);

因为进度类实现了Runnable而不扩展Thread。

您的错误消息也很奇怪:

  

类NewJFrame.progress中的构造函数进度不能应用于给定类型

建议问题出在Thread t1 = new Thread(new progress(jProgressBar1)); 类的构造函数中,该类在NewJFrame类中看起来是嵌套。如果是这样,请摆脱嵌套类,而仅处理独立进度(请重命名为“ Progress”)类。


但是,尽管如此,当您直接从后台线程内部更改JProgressBar(Swing组件)的状态时,您的代码可能会出现问题,这不是Swing线程安全的。最好根据JProgressBar standard tutorial使用SwingWorker并将其链接到JProgressBar的状态(请检查链接)。

例如:

NewJFrame.progress

顺便说一句,您将要学习和使用Java naming conventions。变量名都应以小写字母开头,而类名应以大写字母开头。学习并遵循此规则将使我们能够更好地理解您的代码,并使您能够更好地理解其他人的代码。