【发布时间】:2014-10-09 22:33:11
【问题描述】:
我有带有 JDBC 的 GUI 应用程序。一个线程用于摆动 gui。
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
try {
runApp();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
启动程序后,我在 JTable 中显示数据库中的数据。
public List<Category> getCategory() throws SQLException
{
List<Category> cat = new ArrayList<Category>();
Connection conn = Database.getInstance().getConnection();
System.out.println(conn);
String sql = "select id, name from kategorie";
Statement selectStatement = conn.createStatement();
ResultSet results = selectStatement.executeQuery(sql);
while(results.next())
{
int id = results.getInt("id");
String name = results.getString("name");
Category category = new Category(id, name);
cat.add(category);
}
results.close();
selectStatement.close();
return cat;
}
我想知道如何添加一个新线程,以便所有数据库操作在一个单独的线程中运行,而不是这个线程摆动。
【问题讨论】:
-
是的,看看SwingWorker。我也可能会为您的用例找到一个示例。虽然我需要一些它:-)
-
This tutorial 很好。
-
@lukassz:我已经更新了previous link 中的代码,以真正遵守Swing 的单线程规则。再次检查一下,这次它不会出现任何错误,只需运行
JAR文件。/database.rar -
@lukassz:在这个问题上,我似乎无法理解你。但是我确实查看了代码,但我找不到,您将它添加到表中的确切位置。您只是在
MySQLCategoryDAO类中调用了getCategory(),尽管您从未向JTable添加任何内容。 -
@lukassz:对我来说似乎有点困惑,无法掌握代码。试着做一个小东西,简单地包括你想要实现的东西,不要直接把它整合到你的项目中,只是看流程。只需将从数据库中检索值的部分借给
Database类,而不是到处编写代码。以前从未在MySQL上工作过,所以无法运行它。一个理解流程的小例子,将不胜感激。
标签: java multithreading swing jdbc