【问题标题】:SwingWorker JTextArea UpdatesSwingWorker JTextArea 更新
【发布时间】:2012-05-18 18:00:56
【问题描述】:
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 比较陌生,所以我在理解这个问题时遇到了一些困难。

【问题讨论】:

  • 这不会编译。您能否修改并创建一个示例来编译并突出您的问题?
  • 另见example

标签: java swing textarea swingworker


【解决方案1】:

正如你所说,当涉及到找到最多除数时,我很难理解你的代码。我会更像一个算法问题来处理你的问题。

  1. 我们需要知道List对象publishedValues的内容。只需在您的问题中发布它的内容。 process 函数中的 for 循环很简单,可以正常工作。但是,我不喜欢你一直附加到 GUI 对象编号而不清除,不管那是什么。

  2. 我发现 finalNumber 的代码有点混乱,因为对“if(count > finalNumber..)”的几个依赖及其影响。我的建议是在得到所有除数后进行比较. 让调试更容易。

  3. 最后,因为我认为这是一个算法问题,所以在没有所有这些 GUI 和线程的情况下对您的代码进行原型设计。我认为您这样做只是为了学习,但这会使事情复杂化。软件行业非常重视让事情变得简单,并且没有想象中那么复杂。我挑战你保持简单!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2012-06-02
    相关资源
    最近更新 更多