簡単に言えば。関数が連続して実行される無限ループを含むプログラムを作成し、できるだけ速く実行する必要があります。
ただし、この関数はマイクロ秒の時間スケールで完了しますが、実行にかなり時間がかかる別のスレッドを生成する必要がありますが、前のスレッドに影響を与えてはなりません。
この例が物事を説明するのに役立つことを願っています:
while (updateGUI == true) { //So, forever until terminated
final String tableContents = parser.readTable(location, header);
if (tableContents.length() == 0) {//No table there, nothing to do
} else {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
//updateTable updates a JTable
updateTable(tableContents, TableModel);
TableColumnModel tcm = guiTable.getColumnModel();
}
});
}
***New thread is needed here!
}
したがって、readTable
関数を無限回実行する必要がありますが、次に無限回実行する2番目のスレッドを開始する必要がありますが、実行する必要があるため、完了するまでにミリ秒/秒かかります一部のファイル I/O が発生し、完了するまでに少し時間がかかる場合があります。
Thread
クラスを拡張し、 を使用しExecutors.newCacheThreadPool
て新しいスレッドを生成してみました。ただし、何をしてもreadTable
関数の速度が低下し、データを十分に高速に読み取ることができないため、テーブルが正しく更新されません。
このループの実行方法を再設計する必要がある可能性があります。または、代わりに 2 つの新しいスレッドを開始して、それらのスレッド内に無限ループを配置することもできます。
このように設計された理由は、updateTable
関数が実行されると、 a を更新するために使用される文字列を返すという事実によるものでしJTable
た. GUIのテーブルが作成された場所です。
誰かに何か提案があれば、私は大いに感謝します。
ありがとう