Java SwingWorker JTextArea更新 public int[]doInBackground() { int[]finalNumber=新int[2]; 最终编号[0]=0; 最终编号[1]=0; 整数计数=0; int[]forDisplay=新int[2]; 外部环路: 对于(inti=1;i

Java SwingWorker JTextArea更新 public int[]doInBackground() { int[]finalNumber=新int[2]; 最终编号[0]=0; 最终编号[1]=0; 整数计数=0; int[]forDisplay=新int[2]; 外部环路: 对于(inti=1;i,java,swing,textarea,swingworker,Java,Swing,Textarea,Swingworker,,正如你所说,当你的代码涉及到寻找最多的除数时,我很难理解你的代码。我将更像是一个算法问题来处理你的问题 我们需要知道List object PublishedValue的内容。只需将其内容发布到您的问题中即可。process函数中的for循环非常简单,可以正常工作。但是,我不喜欢您在不清除任何内容的情况下继续向GUI对象编号添加内容 我发现finalNumber的代码有点混乱,因为“if(count>finalNumber..”有几个依赖项,以及它的影响。我的建议是在获得所有除数后进行比较。使

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

  • 我们需要知道List object PublishedValue的内容。只需将其内容发布到您的问题中即可。process函数中的for循环非常简单,可以正常工作。但是,我不喜欢您在不清除任何内容的情况下继续向GUI对象编号添加内容

  • 我发现finalNumber的代码有点混乱,因为“if(count>finalNumber..”有几个依赖项,以及它的影响。我的建议是在获得所有除数后进行比较。使调试更容易

  • 最后,因为我认为这是一个算法问题,所以在不使用所有GUI和线程的情况下对代码进行原型化。我认为你这样做只是为了学习,但会使事情复杂化。软件行业非常重视保持事情的简单性和不太复杂的程度。我向你提出了保持简单的挑战


  • 这不是编译。你能修改并创建一个编译并突出你的问题的示例吗?另请参见此。
    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));
        }
    }