最初に、slp
のメソッドは、おそらくJLabel
を引数とする必要があります。そのため、特定のラベルの表示を変更できます。それ以外の場合は、どのラベルを非表示にするかはわかりません。
第2に、メインスレッド(またはそのクラスのスレッドslp()
)をブロックしないように、Thread.sleep(1000)
は独自のスレッドで実行する必要があります。以下のコードは、実際の作業を行います新しいスレッドを作成するnew Thread(....).start();
を使用する理由です。
第3に、待機中のスレッドが別のスレッドにあるため、ラベルの可視性を変更することは、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
は、私はそれをどのように行うかを教えていただけますか? –