2014-10-04 63 views
0

设置文本我有一个Java应用程序中,我呼吁的线程来执行一些东西:在主窗体上的JLabel从螺纹

public class ThreadTest implements Runnable { 
private final int functionNumber; 
public static mainForm main = new mainForm(); 
private final int time2start; 
public static YourClass obj = new YourClass(); 
public ThreadTest(int functionNumber, int time2start, YourClass obj){ 
this.functionNumber = functionNumber; 
this.time2start = time2start; 

} 
@Override 
public void run(){ 

try{Thread.sleep(time2start);}catch(Exception ex){}//Time Delay before executing methods 
switch(functionNumber){ 
    case 1: 
     obj.runFirst(); 
     break; 
    case 2: 
     obj.runSecond(); 
     main.appendText("Something"); 
     break; 
    case 3: 

{ 
    try { 
     obj.runThird(); 
    } catch (IOException ex) { 
     Logger.getLogger(ThreadTest.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 
     break; 

这是我与Swing GUI的主要形式,方法上,我想从线索附加文字:

void appendText(String text){ 
    generalStatus.setText(text); 
} 

这是如何实现的?我猜我需要使用重绘或其他东西?

+3

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/。永远不要使用事件分派线程以外的线程中的Swing组件。 SwingUtilities.invokeLater()是你的朋友。 – 2014-10-04 09:52:56

回答

0

更新从另一个线程除了Swing线程的GUI部件(JLabel的)不能直接完成。但是,您可以使用SwingUtilities.invokeLater为Swing线程使用同步线程。 GUI组件可以像这样的线程中进行更新,

void appendText(String text) { 
    final String Text=text; 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      generalStatus.setText(Text); 
     } 
    }); 
} 

每当你想除了你应该使用这个机制Swing线程其他线程更新您的GUI组件。

+0

嗯,我似乎无法得到它的工作方法“appendText”被称为从我的线程,我可以看到,通过控制台,但它不能改变“generalStatus”的价值。顺便说一句:一般状态是需要更新的标签。 – BetterNerf 2014-10-04 13:37:28