この前の質問と他のソースを参照しましたが、CountDownLatchを正しく機能させることができません。
背景:mainFrameは、dataEntryFrameという新しいフレームを作成します。dataEntryFrameの[送信]ボタンをクリックすると、レコードがデータベースに追加され、dataEntryFrameが破棄されます。この時点で、mainFrameはすべてのレコードを表示するjListをクリアしてリロードする必要があります。
問題:dataEntryFrameがロードされると、Javaがフリーズし、dataEntryFrameコンポーネントがロードされません。この部分を通過できません...次に、DataEntryFrameで、CountDownLatchは、送信ボタンがクリックされた後にのみデクリメントし、データベーステーブルにレコードを正常に追加し、それ自体を破棄する必要があります。または、ユーザーが[キャンセル]をクリックしたとき...
コード:メインフレームから
clearList();
CountDownLatch dataEntryDone = new CountDownLatch(1);
DataEntryFrame f = new DataEntryFrame(dataEntryDone);
Thread newThread = new Thread(f);
newThread.start();
dataEntryDone.await();
reLoadList();
コード:DataEntryFrameから
public void run(){
initComponents();
loadOtherData();
this.setVisible(true);
}
void submit(){
addRecord();
this.dispose()
dataEntryDone.countDown();
}