我在其中用戶選擇從JComboBox的一個數據庫,並在JTextArea中和按鈕結果的點擊JTable中顯示提供了一個查詢Swing應用程序。如何捕捉到基異常,並顯示在用戶界面上 - java的
按鈕的代碼單擊
private void jbtnRunActionPerformed(java.awt.event.ActionEvent evt) {
try
{
jtbResults.setModel(objtrm.runQuery(jcbRepository.getSelectedItem().toString(), jtaQuery.getText()));
}
catch(Exception e)
{
e.printStackTrace();
JOptionPane.showMessageDialog(this, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
在這段代碼objtrm.runQuery
是在方法的類此UI。 此方法採用數據庫名稱和查詢,調用不同類,這從該查詢和數據庫名稱返回ResultSet
(連接字符串存儲在數據庫中)的另一種方法,將這個ResultSet
到DefaultTableModel
並返回。
現在如果出現網絡問題,我的班級方法返回ResultSet
會拋出IOException
,但是我在JOptionPane上看到的所有錯誤都是錯誤Cannot set a null Table model
。在控制檯的實際堆棧跟蹤是
值java.sql.SQLException:JZ006:捕獲到IOException:的java.net.UnknownHostException:au201d002v
我想告訴用戶這個例外,而不是我所得到的。 是否有不同的方法來處理這種情況,或者是否存在可以給出根本原因的類的任何直接方法。
我試過e.getCause
,它什麼都沒有返回。
EDIT runQuery方法
public DefaultTableModel runQuery(String repoName,String query)
{
DefaultTableModel model =null;
new LoggingManager().addToLog("TestRepositoryUI Methods RunQuery");
try
{
RepositoryManager rm = new RepositoryManager();
Repository r = rm.getRepositoryByName(repoName);
ResultSet rs = rm.Repo_to_ResultSet(r.RepoID, query);
model = new BuildTableModel().build(rs);
}
catch(Exception e)
{
e.printStackTrace();
new LoggingManager().addToLog(e);
}
return model;
}
repo_to_resultset方法(這是這個方法,必將得到IOException的,因爲我不連接到網絡。)
case "Sybase":
try
{
new LoggingManager().addToLog("RM Repo_To_ResultSet() Sybase");
Connection conn=null;
Statement s;
String connString = objRe.ConString;
Class.forName("com.sybase.jdbc3.jdbc.SybDriver");
conn = DriverManager.getConnection(connString,"username","pass");
s = conn.createStatement();
s.execute(query);
rs = s.getResultSet();
}
catch(Exception e)
{
e.printStackTrace();
new LoggingManager().addToLog(e);
}
break;
由於
要準確地檢查捕獲重新拋出異常,因此將在
jbtnRunActionPerformed()
被抓,做到' System.err.println(「---」);'在printStacktrace之前。您可能會捕獲該IOException,然後將其拋出,或將其包裝在自己的異常中 - 而不傳遞原始異常(原因)作爲異常構造函數參數。修復這一點是有道理的。也許你看到的堆棧跟蹤發生得更早。 –你確定'runQuery'真的會拋出異常嗎?你能顯示它的代碼嗎? – RealSkeptic
@RealSkeptic運行查詢調用數據庫相關的方法類,它查詢數據庫並返回結果集。正是這個類產生了這個異常。我將包含代碼 – Nikhar