[英]Java Swingworker stops working at propertyChangeListener at 100
[英]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.