2011-03-11 6 views
1

Я написал простую программу с java swing, которая предполагает запустить другой поток, и в этом потоке JForm появится, когда я нажму кнопку. Но JForm не появляется ... Я использовал if (Thread.currentThread().getName() == "Thread1"), чтобы выполнить конкретную задачу для этого потока, когда я прокомментирую, что программа работает отлично, я не могу понять, почему она не идет в блок if ... Пожалуйста, помогите мне с этим ...java thread problem

Заранее спасибо!

Вот код,

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

Большое спасибо за быстрый ответ ... Он отлично работает ... Еще раз спасибо за помощь :-) –

1

Try:

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

или

if (Thread.currentThread().getName().compareTo("Thread1") > 0) 
1
  1. почему у вас что проверка для текущих потоков назвать так или иначе? Этот поток будет единственным, кто будет называть этот метод в любом случае.

  2. Вы не должны сравнивать значения String с использованием ==, поскольку он проверяет идентификатор объекта. Вместо этого вы должны использовать Thread.currentThread().getName().equals("Thread1").

  3. Вы не должны взаимодействовать с любыми компонентами Swing/AWT за пределами Event Dispatch Thread!