java线程问题

时间:2011-03-11 09:43:55

标签: java multithreading swing

我用java swing编写了一个简单的程序,假设启动另一个线程,在该线程中,当我单击一个按钮时,JForm会出现。但JForm没有出现......我使用if (Thread.currentThread().getName() == "Thread1")为该线程执行特定任务,当我评论该程序运行完美时,我无法理解为什么它不会转到if块...请有人帮我这个......

提前致谢!

这是代码,

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);

    //}     
}

}

3 个答案:

答案 0 :(得分:2)

请尝试使用getName().equals("Thread1")

equals比较字符串,==检查两个字符串是否是同一个对象。

答案 1 :(得分:1)

尝试:

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

if (Thread.currentThread().getName().compareTo("Thread1") > 0)

答案 2 :(得分:1)

  1. 为什么要检查当前线程名称呢?无论如何,该线程将是唯一一个调用该方法的线程。

  2. 在检查对象标识时,不得使用String比较==个值。您应该使用Thread.currentThread().getName().equals("Thread1")代替。

  3. 您不应与Event Dispatch Thread以外的任何Swing / AWT组件进行互动!