首先,您的方法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
能否請你告訴我,我該怎麼做呢? –