#java #multithreading #swing #thread-sleep
#java #многопоточность #swing #поток-сон
Вопрос:
Я столкнулся с проблемой в потоке.Вот мой код
private void CustomBrightActionPerformed(java.awt.event.ActionEvent evt) {
creed = new Thread() {
public void run() {
final JFrame jfmae = new JFrame("Set BrightNess");
JLabel jla = new JLabel("!@#$");
jfmae.add(jla, BorderLayout.CENTER);
jfmae.setSize(180, 180);
jfmae.addMouseListener(new Mymos());
jfmae.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent) {
jfmae.dispose();
}
});
jfmae.setVisible(true);
}
};
creed.start();
}
class Mymos extends MouseAdapter {
public void mousePressed(java.awt.event.MouseEvent evt) {
try {
creed.sleep(3000);
} catch (InterruptedException e) {
}
Bigh2MousePressed(evt);
}
private void Bigh2MousePressed(java.awt.event.MouseEvent evt) {
System.out.println("dsds");
}
}
CustomBrightActionPerformed
это метод другого класса, который имеет дело с событием действия и Mymos
является внутренним классом.Проблема в том, что я сплю creed Thread
, но мой основной поток также спит в течение 3 секунд.Почему?
Ответ №1:
вы вызываете sleep()
основной поток,
sleep()
является static
ли метод, который вы просто используете для вызова экземпляра его потока (creed), который не рекомендуется, он спит Thread
, в котором вызывается этот метод
если вы хотите приостановить поток creed, вам нужно выполнить Thread.sleep()
из его run()
метода
Комментарии:
1. Один вопрос. если я выполню некоторые операции в Bigh2MousePressed, и если возникнет некоторая задержка, будет ли это также приостанавливать выполнение основного потока?
2. если он вызывается в том же потоке, то да, если это асинхронный вызов в новом потоке, то он сразу же вернется в основной поток и выполнит операцию в другом потоке
3. Я попробовал Thread.sleep() из метода запуска creed, но все равно он приостанавливает основной поток
4. вы удалили call to
creed.sleep(3000);
?5. черт, я этого не сделал. Извините за это.