2017-02-03 72 views
-1

我正在编写一个程序,其中我将一个名称与一个列表进行匹配。如果我没有找到匹配项,我在SQLite数据库上查找名称,将名称信息提取到文本字段中,然后显示该卡(cardlayout)。当我运行这个时,我只能得到最后一次不匹配的信息。在研究这个时,我想我可以使用SwingWorker来解决这个问题。我把我的做,并把它放在一个SwingWorker类,并添加一个发布()我想显示的信息。我得到相同的结果,只显示最后一个不匹配。Java SwingWorker未按预期工作

这里是我的代码片段:

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"); 
     } 

任何帮助,将不胜感激。

+2

我们不能编译也不能运行代码片段,我们不希望整个代码库。相反,我强烈建议您创建并发布有效的[mcve] - 请阅读链接。 –

回答

4

我得到相同的结果,只显示最后一个不匹配。

因为这显示你的代码做:

@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(...)在do-while循环被称为在doInBackground()方法。因为上面的代码是在Swing事件线程上调用的,所以不要在上面的for循环中放置Thread.sleep

并注意,如果这个答案不回答你的问题,那么是的,你会想创建并发布有效的MCVE

+0

就是这样。谢谢。 –