我的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语句捕获?