簡単にするために、ファイルをダウンロードするアプリケーションを想像してみてください。進行状況を表示する1つのラベルが付いたシンプルなGUIがあります。EDT違反を回避するために、すべての合法的な市民のように、私は1つのスレッド(メイン)でファイルをダウンロードし、別のスレッド(EDT)でGUIを更新します。したがって、これがpseudcodeの関連するチャンクです。
class Downloader {
download() {
progress.startDownload();
while(hasMoreChunks()) {
downloadChunk();
progress.downloadedBytes(n);
}
progress.finishDownload();
}
}
class ProgressDisplay extends JPanel {
JLabel label;
startDownload() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
label.setText("Download started");
}
});
}
downloadedBytes(int n) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
label.setText("Downloaded bytes: " + n);
}
});
}
finishDownload() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
label.setText("Download finished");
}
});
}
}
Javaがクロージャをサポートしておらず、コードが非常に明確であるという事実が気に入っています。冗談はさておき、私は疑問に思っています...私はそれを間違っていますか?SwingUtilities
すべての方法での匿名の実装などで、この醜い定型文をすべて排除することは可能Runnable
ですか?
私の場合はこれより少し複雑ですが、プロキシなどを実装してオーバーエンジニアリングしないようにしています。