gpt4 book ai didi

java - 如何捕获基本异常并在 UI 上显示 - java

转载 作者:行者123 更新时间:2023-12-02 04:27:02 24 4
gpt4 key购买 nike

我有一个 swing 应用程序,其中用户从 JComboBox 选择数据库并在 JTextArea 中提供查询,然后单击按钮结果显示在 JTable 中。

按钮点击的代码

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根据此查询和数据库名称(连接字符串存储在数据库中),转换此 ResultSetDefaultTableModel并返回它。

现在,如果出现网络问题,我的类方法将返回 ResultSet抛出IOException但我在 JOptionPane 上看到的只是错误 Cannot set a null Table model 。控制台中的实际堆栈跟踪是

java.sql.SQLException: JZ006: Caught IOException: java.net.UnknownHostException: au201d002v

我想向用户展示这个异常,而不是我得到的。是否有不同的方法来处理这种情况,或者有没有来自 Exception 的直接方法可以给出根本原因的类。

我试过e.getCause ,它什么也不返回。

编辑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;

谢谢

最佳答案

Exception 类的 printStackTrace() 方法(即在控制台中打印的内容)是异常 toString() 方法和 getStackTrace() 方法的组合。

如果您阅读 documentation printStackTrace() 的方法,它告诉您从哪里获取打印出的值。离开本文档,您可以获取异常并以类似于 printStackTrace() 输出的方式对其进行格式化。

    ...
} catch(Exception e) {
String trace = e.toString() + "\n";
for(StackTraceElement element : e.getStackTrace())
trace += element.toString() + "\n";
JOptionPane.showMessageDialog(this, trace, "Error", JOptionPane.ERROR_MESSAGE);
}

关于java - 如何捕获基本异常并在 UI 上显示 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32014877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com