Java 如何捕获由外部jar引起的异常

Java 如何捕获由外部jar引起的异常,java,jsch,Java,Jsch,我有这样一个场景: public void openChannelHelper() throws com.jcraft.jsch.JSchException { // call your method here. } 我试图在数据库服务器上执行一个命令(df-hi.e查找磁盘可用空间的命令)。我试图通过使用两个JAR文件来实现这一点,即jsch-0.1.51.JAR和ganymed-ssh2-build210.JAR 现在,当输入任何worng Credentail时,会导致以

我有这样一个场景:

public void openChannelHelper() throws com.jcraft.jsch.JSchException {
    // call your method here.    
}
我试图在数据库服务器上执行一个命令(df-hi.e查找磁盘可用空间的命令)。我试图通过使用两个JAR文件来实现这一点,即jsch-0.1.51.JAR和ganymed-ssh2-build210.JAR

现在,当输入任何worng Credentail时,会导致以下异常

com.jcraft.jsch.JSchException
但当我试图抓住这个例外时,它说:

Unreachable catch block for JSchException. This exception is never thrown from the try statement body
程序失败了,我怎样才能捕获这个“com.jcraft.jsch.JSchException”异常

欢迎任何建议。提前谢谢

完整的堆栈跟踪如下所示:

Connect fails with the following exception: com.jcraft.jsch.JSchException: java.net.UnknownHostException: Select Option
会议结束了 com.jcraft.jsch.JSchException:会话已关闭

在com.jcraft.jsch.Session.openChannel上(Session.java:752) 位于net.neoEmilding.sshxcute.core.SSHExec.exec(SSHExec.java:164) 位于org.nrift.SchMaint.controller.CheckSpaceServlet.doPost(CheckSpaceServlet.java:63) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

根据我所知,该方法未声明引发异常,因此您的IDE抱怨从未引发异常。作为一种解决方法,您可以像这样封装方法调用:

public void openChannelHelper() throws com.jcraft.jsch.JSchException {
    // call your method here.    
}
这将允许您执行以下操作:

try {
    openChannelHelper();
} catch (com.jcraft.jsch.JSchException e) {
    // handle the exception here
}

希望这有帮助。

我认为您已经编写了多个catch块,但顺序不正确。你应该试试贝娄

try {
    //your code will be here where JSchException may occur 
} catch (com.jcraft.jsch.JSchException e) {
    // write here what you want if JSchException occur
} catch (Exception e) {
    // this block for other exception
}

你能提供完整的堆栈跟踪吗?试着只捕获一般的“异常”。你读过这篇文章吗?您的问题是这样的吗?“com.jcraft.jsch.JSchException”可能是一个嵌套的异常,这意味着它在堆栈跟踪中前面加上了“起因”。若要查看是否是这种情况,请在catch块中调用e.printStackTrace()。该方法是否声明抛出JSCHEException?