我是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) {
}
}
}
}
答案 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。变量名都应以小写字母开头,而类名应以大写字母开头。学习并遵循此规则将使我们能够更好地理解您的代码,并使您能够更好地理解其他人的代码。