public int[] doInBackground()
{
int[] finalNumber = new int[2];
finalNumber[0] = 0;
finalNumber[1] = 0;
int count = 0;
int[] forDisplay = new int[2];
outerLoop:
for(int i = 1; i <= findUpTo; i++)
{
forDisplay[0] = i;
forDisplay[1] = 2;
publish(forDisplay);
for(int a = 1; a <= i; a++)
{
if(isCancelled())
break outerLoop;
else
{
try
{
Thread.sleep(numGen.nextInt(5));
}
catch(InterruptedException e)
{
e.printStackTrace();
}
forDisplay[0] = a;
if(i%a == 0)
{
forDisplay[1] = 1;
count++;
if(count > finalNumber[1])
{
finalNumber[0] = a;
finalNumber[1] = count;
}
}
else
{
forDisplay[1] = 0;
}
publish(forDisplay);
}
}
setProgress(100*(i+1)/findUpTo);
count = 0;
}
return finalNumber;
}
protected void process(List<int[]> publishedValues)
{
for(int i = 0; i < publishedValues.size(); i++)
{/*
if(publishedValues.get(i)[1] == 1)
{
numbers.setFont(new Font("Serif", Font.ITALIC, 16));
}
else if(publishedValues.get(i)[1] == 2)
{
numbers.setFont(new Font("Serif", Font.BOLD, 18));
numbers.append("\t");
}*/
numbers.append(publishedValues.get(i)[0] + "\n");
//numbers.setFont(new Font("Serif", Font.PLAIN, 16));
}
}
我不确定为什么这不起作用;如果有人可以提供帮助,我将不胜感激。我试图在 JTextArea 发布时输出 forDisplay[0] 一次。forDisplay[1] 用于确定正在处理的字体(我现在评论了字体更改,尽管它正在进入 ifs in process [there was repeating text indentation],但它们也没有工作)
问题是该进程似乎连续多次附加相同的数字并跳过其他数字,我不知道为什么。
该程序本身的任务是找到一个具有最多除数的数字,从 1 到“findUpTo”(用户输入)不产生余数。
我对 SwingWorker 比较陌生,所以我在理解这个问题时遇到了一些困难。