我試圖用遊戲實現Java Swing GUI應用程序。遊戲將計算5秒鐘內點擊一次按鈕的次數。sqlite4java多線程支持解決方案
我在我的一個Java GUI項目中使用了sqlite4java
。它非常簡約,因此僅支持單線程應用程序。
我想在5秒鐘後執行一些SQL查詢。我有一個線程在我的按鈕的onclick監聽其run()方法等實現開始執行以下操作:
run() {
timeLeft = 5;
score = 0;
while(timeLeft>0)
Thread.sleep(100);
timeLeft -= 0.1;
update left time on GUI;
}
// time is up
execute some SQLite INSERT query here;
}
而且由於sqlite4java是支持單線程,它拋出一個異常:
SQLite error:com.almworks.sqlite4java.SQLiteException:
[-98] DB[1] confined(Thread[main,5,]) used (Thread[Thread-3,6,main])
如何線程完成後(線程外)可以執行嗎?它拋出異常,因爲被調用者線程和數據庫實例化的線程(主線程)不相同。
在線程終止後,如何讓主線程發出信號(並在主線程中處理此信號)?
我想要實現的是執行查詢將用戶的分數添加到高分列表中。這不是一項家庭作業,我正在爲自己的ORM框架開發一個概念驗證應用程序。
@Keith,其實我試圖找到一種方法來進行線程之間的溝通。 sqlite4java不允許在其他線程上執行。我可能會實現一個請求隊列並使用'.wait()'和'.notifyAll()'處理它。但尋找更優雅的解決方案。謝謝。 – 2011-05-27 23:49:23
@Ahmit,http://code.google.com/p/sqlite4java/說:「[An]應用程序可能會從不同線程打開多個連接到同一個數據庫的連接。」對我而言,這意味着您可以在專用的「DB服務線程」上打開數據庫,然後在線程安全的請求隊列後面「隱藏」該線程。每個請求將是一個未來,允許您回讀結果,並檢查錯誤。它仍然非常糟糕(延遲的錯誤檢測),但它可以工作,我猜。 – corlettk 2011-05-28 00:00:29