2011-11-02 97 views
-2

我有問題.. 在我的代碼中,我有它,以便文本應輸出到JTextField。當我運行該程序時,它不會。然而,如果我直接在我的代碼把文本放入JTextField後放入一個JOptionPane,那麼它的工作原理...JTextField loading

任何人都有一個解決方案,使JTextField更新沒有JOptionPane之後?

我的代碼:

// Works: 
JTextField.setText("String"); 
JOptionPane.showMessageDialog(null, "String"); 

// Doesn't Work: 
JTextField.setText("String"); 
//JOptionPane.showMessageDialog(null, "String"); 
+1

給出的例子太含糊不清了。你在開始的某個線程的上下文中設置文本嗎? –

+0

您有沒有向我們展示的代碼中存在一個錯誤。我想知道你是否會遇到併發問題,就好像你試圖重複更新JTextField,或許是在調用Thread.sleep()的循環中,這就是爲什麼它沒有顯示,但這只是一個SWAG,直到你告訴我們需要了解的細節。 –

+0

我沒有使用任何線程...但也許我有的框架... –

回答

2

有兩個原因,這可能會失敗:

  1. 你調用從主(搖擺)螺紋
  2. 你打電話setText()setText()從主(Swing)螺紋

在第一種情況下,在SwingUtilities.invokeLater()中包裝呼叫。

在後一種情況下,您設置了文本,但是您屏蔽了Swing線程,因此無法呈現更改。您將需要創建一個後臺工作人員來完成這項工作,並使用SwingUtilities.invokeLater()來更新工作線程中的文本字段。

[編輯]見Swing指南中的示例如何使用後臺線程,以及如何從那裏更新UI:http://download.oracle.com/javase/tutorial/uiswing/concurrency/interim.html

+1

你的意思是這樣嗎? 'javax.swing.SwingUtilities.invokeLater(新的Runnable(){ \t公共無效的run(){ \t \t JTextField.setText( 「連接您#TeamZeale爲」 + N +」,掛在它可能需要while ...「); \t} });' –

+0

'cus that does not work –

+1

它只適用於在後臺線程中完成所有工作。如果阻塞主線程,Swing將永遠無法處理事件並且不會發生渲染。用戶界面也會顯示爲「凍結」。 –

0

爲什麼不使用重繪()的文本更新後?

如果內存爲我服務,應該解決不附加文本問題。