从递归方法调用另一个类的方法:Java

从递归方法调用另一个类的方法:Java,java,recursion,race-condition,Java,Recursion,Race Condition,我有两个班,A班和B班- 类A:-此类具有getData方法,用于从数据库获取数据 class A { public synchronized getData() { // get some data from database, in finally block close connection } } 类B:-它有递归方法m(),在这个方法中我调用类A的getData() class B { m() { //some condition to

我有两个班,A班和B班-

类A:-此类具有getData方法,用于从数据库获取数据

class A {
    public synchronized getData() {
       // get some data from database, in finally block close connection
    }
}
类B:-它有递归方法m(),在这个方法中我调用类A的getData()

class B {
   m() {
      //some condition to terminate the recursion
      A a = new A();
      a.getData();
      m();
   }
}
我收到的错误:-

java.lang.NullPointerException:null 在com.mchange.v2.c3p0.impl.NewProxyConnection.getAutoCommit(NewProxyConnection.java:1226)~[c3p0-0.9.5.1.jar:0.9.5.1]

对于getData()方法的第一次调用,我可以从DB中获取数据,但在第二次递归之后,我将连接设置为关闭。任何帮助都将不胜感激

更新:

我有一个DB Util方法,它在每次调用getData()方法时打开连接。如果我在没有递归方法的情况下调用它(很多次),它可以正常工作,但是如果我使用递归,我会出错。递归方法是否需要处理特殊情况?

错误指定连接已关闭。另外,在您的注释
//从数据库获取一些数据中,在finally block close connection
中,您提到了在使用后关闭了连接,但没有提到是否在
getData()
方法中打开连接

我建议如下:
  • 检查您是否正在
    getData()
    方法中打开连接。如果没有,则或者仅使用此方法打开连接(从其他方法中删除打开连接的代码)或者在使用此方法后不要关闭连接,而是根据需要使用其他方法关闭连接

  • 检查连接资源是否可重用。
  • 我相信在这里,您可以通过使用调试器找到答案。@SasikumarMurugesan谢谢!我已经通过了你分享的链接,但它对我没有帮助。在我的例子中,我有一个递归方法,从中调用另一个类的getData。我认为情况并非如此。我有一个DB Util方法,它在每次调用getData()方法时打开连接。如果我在不使用递归方法的情况下调用此方法(多次)可以正常工作,但如果我使用递归,则会出现错误。@rish因为在递归中,第一次调用的
    getData()
    方法使用连接并关闭它,因此该连接不可用于进一步调用
    getData()
    方法。如果不使用递归调用
    getData()
    方法,则不会出现这种情况。按照建议尝试一次,然后请评论您的观察结果。查看代码后,我注意到我的DBUtil类提供了现有连接(已关闭)。我来自Angular2的背景,需要学习更多关于Java的知识:)。谢谢