2011-03-11 72 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组件进行交互!