簡體   English   中英

Java SwingWorker無法按預期工作

[英]Java SwingWorker not working as expected

我正在編寫一個程序,在其中將名稱與列表匹配。 如果找不到匹配項,我將在SQLite DB上查找名稱,將名稱信息提取到文本字段中,然后顯示卡(cardlayout)。 當我運行此命令時,我只得到最后一次不匹配的信息。 在研究這個問題時,我認為我可以使用SwingWorker解決這個問題。 我花了一些時間將其放在SwingWorker類中,並在想要顯示信息的位置添加了publish()。 我得到相同的結果,僅顯示最后一個不匹配。

這是我的代碼片段:

   public class processTeeTimes extends SwingWorker <Integer, String>
    {

        @Override
        protected Integer doInBackground() throws Exception
        {
       //   Process all tee times foursome at a time

            String memberGuest;                                     // Member or guest
            do                                                      // Process players in foursome
            {

                .
                .
                .


                    if (!firstOnGHIN())
                    {
                        System.out.print("No match - first (" + tsTime + "): ");
                        printGolfer();                      // Print no match
                        publish(golfer[0]);

                    }

                .
                .
                .

            }
            while (!EOF)


        }

        @Override
        protected void process(List<String> golferList)
        {
            for (int gIndex = 0; gIndex < golferList.size(); gIndex++)
            {
                textFieldRMLast.setText(golferList.get(gIndex));
                cards.show(panelCont, ROSTERMAINT); // Show roster maint card
            }
        }

        @Override
        protected void done()
        {
            .
            .
            .

            System.out.println("All done processing Tee Sheet");
        }

任何幫助,將不勝感激。

我得到相同的結果,僅顯示最后一個不匹配。

因為這就是您的代碼似乎正在做的事情:

    @Override
    protected void process(List<String> golferList)
    {
        for (int gIndex = 0; gIndex < golferList.size(); gIndex++)
        {
            textFieldRMLast.setText(golferList.get(gIndex));
            cards.show(panelCont, ROSTERMAINT); // Show roster maint card
        }
    }

您將數據放入JTextField中,並且一旦遇到更多數據,它將立即用新文本替換之前的文本。 如果要顯示多行數據,則應使用顯示多行數據的組件,例如JList或JTable。

如果希望在JTextField中查看數據之間存在延遲,請考慮將Thread.sleep(...)放在doInBackground()方法中調用的do-while循環中。 不要在上面的for循環中放入Thread.sleep ,因為上面的代碼是在Swing事件線程上調用的。

並注意,如果此答案不能回答您的問題,那么可以,您將需要創建並發布有效的MCVE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM