我试图用游戏实现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