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 に入っていても機能していませんでした [テキストのインデントが繰り返されていました])
問題は、プロセスが同じ番号を連続して複数回追加し、他の番号をスキップしているように見えることです。その理由はわかりません。
プログラム自体は、1 から "findUpTo" (ユーザー入力) までの剰余を生成しない除数が最も多い数を見つけることを任されています。
私は SwingWorker を初めて使用するので、この問題を理解するのに苦労しています。