首先,您的方法slp
应该采用JLabel
作为参数,因此您可以修改特定标签的可见性。否则,该方法不知道要隐藏哪个标签。
其次,为了不阻塞主线程(或任何线程类slp()
),该Thread.sleep(1000)
应该在自己的线程中运行。这就是为什么下面的代码使用new Thread(....).start();
创建一个新的线程会做实际的工作。
第三,由于等待时间现在在单独的线程中,因此必须在Swing Events线程上再次更改标签可见性。为此,我们使用SwingUtilities.invokeLater()
我们然后设置标签的可见性。
总之,代码看起来是这样的:
public void slp(JLabel label) {
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
label.setVisible(false);
}
});
}
}).start();
}
的代码可以进一步“清理”通过使用从Java 8拉姆达表达式为可用:
public void slp(JLabel label) {
new Thread(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
SwingUtilities.invokeLater(() -> label.setVisible(false));
}).start();
}
你需要在新线程中运行1秒等待。 – cello
能否请你告诉我,我该怎么做呢? –