我用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);
//}
}
}
答案 0 :(得分:2)
请尝试使用getName().equals("Thread1")
。
equals
比较字符串,==
检查两个字符串是否是同一个对象。
答案 1 :(得分:1)
尝试:
if (Thread.currentThread().getName().equals("Thread1"))
或
if (Thread.currentThread().getName().compareTo("Thread1") > 0)
答案 2 :(得分:1)
为什么要检查当前线程名称呢?无论如何,该线程将是唯一一个调用该方法的线程。
在检查对象标识时,不得使用String
比较==
个值。您应该使用Thread.currentThread().getName().equals("Thread1")
代替。
您不应与Event Dispatch Thread以外的任何Swing / AWT组件进行互动!