проблема с потоком Java - PullRequest
       3

проблема с потоком Java

1 голос
/ 11 марта 2011

Я написал простую программу с 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 ]

2 голосов
/ 11 марта 2011

Попробуйте использовать getName().equals("Thread1").

equals сравнивает строки, == проверяет, являются ли две строки одним и тем же объектом.

1 голос
/ 11 марта 2011
  1. почему вы все равно проверяете текущее имя потока? Этот поток будет единственным, кто вызовет этот метод в любом случае.

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

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

1 голос
/ 11 марта 2011

Попробуйте:

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

или

if (Thread.currentThread().getName().compareTo("Thread1") > 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...