我想问一下如何在我的代码中提供jProgressBar。我使用netbeans接口。 progressBar将在达到maximum_iteration后结束。 jProgressBar已经在其他类中了。我该怎么办呢?谢谢。请帮忙。
train()被放在其他班级。
public void train(){
for(int iteration=0; iteration<this.max_iteration; iteration++){
//int percent = (iteration/this.max_iteration) * 100;
//cs.jProgressBar1.setValue(percent);
for(int index=0; index<this.hms; index++){
Node[] newChord = {};
double random = Math.random();
/*process HS*/
if(this.original_chord != null){
// ensure the fist note of the new chord is not altered
newChord[0].notes = new int[first_chord_notes.length];
for(int j=0; j<first_chord_notes.length; j++){
newChord[0].notes[j] = first_chord_notes[j];
}
}
// evaluate new chord and substitute the worst one in hs if new chord is better
double newFitness = this.nodeListFitness(this.original_chord, newChord);
int worstIndex = this.worst_index();
double worstFitness = this.fitness[worstIndex];
if(newFitness > worstFitness){
this.hm[worstIndex] = newChord;
this.fitness[worstIndex] = newFitness;
}
}
System.out.println("Harmony Memory " + (iteration+1));
this.debug();
System.out.println("");
//JProgressBar jProgressBar1 = new JProgressBar();
//cs.jProgressBar1.setValue(iteration);
//cs.jProgressBar1.setEnabled(true);
}
}
答案 0 :(得分:0)
我不确定100%但是只能在EventDispatcherThread内部更新Swing组件,这是运行GUI的线程。因此,在GUI中调用方法train()
可能会更好,因此它会遇到EDT。另外,我无法理解你为什么要调用JProgessBar的构造函数,如果你说它已经在其他类中了,可能其他类(我想象它是GUI)已经创建了一个新的进度条实例