从EDT线程进行DB调用



在JPanel中,我有一个组合框,以便用详细信息更新组合框。我需要从后台数据库查询。这会使整个GUI冻结。

if (ccyPairs.size() == 0) {
  try {
    String query = "SELECT * FROM " + PropertyFile.getInstance().getSmfTable() + " WHERE SECURITYTYPE = 4 ";
    Security[] securities = SecurityMaster.getInstance().getData(query, false);
    for (Security security : securities) {
      String Symbol = security.getSymbol();
      ccyPairs.add(Symbol);
    }
  } catch (Exception exception) {
    Log.error(getClass().getName(), "getValidSymbols", "Exception occurred while retrieving fx symbols from smf table " + exception.getMessage());
  }
  return ccyPairs;
}
return ccyPairs;

在这里Security[]securities=SecurityMaster.getInstance().getData(query,false);是对数据库的调用。

谁能解释一下如何解决这个问题吗?

您应该按照Worker Threads和SwingWorker中的说明使用SwingWorkers,以便在DB获取数据时释放EDT。

最新更新