2011-03-11 113 views
1

我用java swing編寫了一個簡單的程序,它假設啓動另一個線程,並且在該線程中,單擊按鈕時將顯示一個JForm。但JForm沒有顯示出來......我使用if (Thread.currentThread().getName() == "Thread1")來完成該線程的具體任務,當我評論該程序完美運行時,我不明白爲什麼它不會去if塊...請別人幫我與此...java線程問題

在此先感謝!

下面是代碼,

public class Test extends JFrame implements ActionListener { 

JPanel panel; 
JButton button; 

public Test() { 

    setVisible(true); 
    setSize(300, 300); 
    setDefaultCloseOperation(DISPOSE_ON_CLOSE); 

    panel = new JPanel(); 
    button = new JButton("click me"); 

    button.addActionListener(this); 

    panel.add(button); 
    add(panel, BorderLayout.CENTER); 

} 




public static void main(String[] args) { 
    Test tst=new Test(); 
} 

@Override 
public void actionPerformed(ActionEvent arg0) { 
    if(arg0.getSource()==button){ 
     System.out.println("test"); 
    test2 test = new test2(); 
    Thread tr1 = new Thread(test);  
    tr1.setName("Thread1"); 
    tr1.start(); 
    } 

} 
} 

class test2 implements Runnable{ 


public void run() { 
    //if (Thread.currentThread().getName() == "Thread1") { 
     System.out.println("inside thread"); 
     JFrame frame2=new JFrame(); 
     frame2.setVisible(true); 
     frame2.setSize(300, 300); 
     frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

    //}  
} 

}

回答

2

嘗試使用getName().equals("Thread1")代替。

equals比較字符串,==檢查兩個字符串是否是相同的對象。

+0

非常感謝您的快速回答......它完美地工作......再次感謝您的幫助:-) – 2011-03-11 09:48:11

1

嘗試:

if (Thread.currentThread().getName().equals("Thread1")) 

if (Thread.currentThread().getName().compareTo("Thread1") > 0) 
1
  1. 爲什麼你有檢查反正命名當前線程?無論如何,該線程將是唯一調用該方法的線程。

  2. 您不能使用==來比較String的值,因爲它會檢查對象標識。您應該使用Thread.currentThread().getName().equals("Thread1")來代替。

  3. 您不應該與Event Dispatch Thread之外的任何Swing/AWT組件進行交互!