我的 AbstractServer 中有这个方法:
synchronized protected void clientException(
ConnectionToClient client, Throwable exception) {
try
{
client.close();
}
catch (Exception e) {}
}
它的目的是从客户端捕获所有未捕获的异常并终止它们与服务器的连接。这是关闭方法:
final public void close() throws IOException
{
readyToStop = true; // Set the flag that tells the thread to stop
try
{
closeAll();
}
finally
{
server.clientDisconnected(this);
}
}
我在我的服务器上有以下方法:
public ArrayList<String> getMemberdetails (ArrayList<String> string)
{
ArrayList<String> ref = new ArrayList<String>();
try
{
stmt = conn.createStatement();
String s = new String ("SELECT * FROM readercard mc, sysuser s WHERE s.userID=mc.userID AND mc.userID='"+ string.get(1) +"'");
System.out.println(s);
ResultSet rs = stmt.executeQuery("SELECT * FROM readercard mc, sysuser s WHERE s.userID=mc.userID AND mc.userID='"+ string.get(1) +"'");
if(rs.next())
{
ref.add(rs.getString("userFirstName"));
ref.add(rs.getString("userLastName"));
ref.add(rs.getString("email"));
ref.add(rs.getString("status"));
ref.add(rs.getString("userPhone"));
}
if (!rs.first())
ref.add(null);
rs.close();
} catch (SQLException e) {e.printStackTrace(); }
catch (Exception e) {e.printStackTrace();}
return ref;
}
每次客户端启动连接时,此方法都会午餐,并在第一次调用时起作用。
当我从服务器上的另一个方法调用此方法时,就会出现问题。在线:stmt = conn.createStatement();
它不起作用。客户端应用程序卡住了,在服务器日志中我看到服务器为客户端调用了 close 方法(这意味着发生了异常)。
如果我继续使用该线路服务器进行调试,则会立即显示此页面:
首先,我不知道可能是什么异常,正如我所说的那样,该方法getMemberdetails
在第一次调用时工作得很好(每次客户端登录应用程序时)。其次,如果stmt = conn.createStatement();
抛出SQLException
异常,为什么它不会在 catch 语句中被捕获?