我正在尝试用一个游戏实现一个Java Swing GUI应用程序。这个游戏是计算一个按钮在5秒内被点击了多少次。
我在我的一个Java GUI项目中使用了sqlite4java。它非常简约,因此只支持单线程应用程序。
我想在5秒后执行一些SQL查询。我在按钮的onclick监听器中启动了一个Thread,它的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框架开发一个概念验证应用程序。
发布于 2011-05-28 15:59:54
正如@corlettk建议的那样,您需要有一个单独的线程来执行数据库操作。sqlite4java附带了SQLiteQueue,它可以为您做到这一点。有一个tutorial和javadoc with example。
确保使用SQLiteJob包装所有数据库操作,并将它们传递到队列。
希望这能有所帮助!Igor
发布于 2011-05-28 07:32:55
艾哈迈德
我猜您必须在一个线程上执行所有的“数据库工作”(包括dis/connect),这个线程可能专门用于此目的;甚至可能“隐藏”在请求队列后面。
那就祝你好运。你能“直接”换掉RDBMS吗?
干杯。基思。
https://stackoverflow.com/questions/6158570
复制相似问题