Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;“主要”;调用函数getConnection()时出现java.lang.StackOverflower错误_Java - Fatal编程技术网

“线程中的异常”;“主要”;调用函数getConnection()时出现java.lang.StackOverflower错误

“线程中的异常”;“主要”;调用函数getConnection()时出现java.lang.StackOverflower错误,java,Java,我在编译项目时遇到错误- Exception in thread "main" java.lang.StackOverflowError at sun.reflect.Reflection.getCallerClass(Native Method) at java.lang.ClassLoader.getCallerClassLoader(Unknown Source) at java.lang.Class.forName(Unknown Source) at t

我在编译项目时遇到错误-

Exception in thread "main" java.lang.StackOverflowError
    at sun.reflect.Reflection.getCallerClass(Native Method)
    at java.lang.ClassLoader.getCallerClassLoader(Unknown Source)
    at java.lang.Class.forName(Unknown Source)
    at testpackage.DriverManager.getConnection(DriverManager.java:14)
    at testpackage.DriverManager.getConnection(DriverManager.java:20)
    at testpackage.DriverManager.getConnection(DriverManager.java:20)
这是我的第一个文件代码-

package testpackage;

import java.sql.*;

import javax.swing.JOptionPane;

class DriverManager {
       static Connection dbConnection = null;

       public static Connection getConnection(String String_url, String USER, String PASS) throws SQLException 
       {
          try {

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            //JOptionPane.showMessageDialog(null, "driver load successfully"); 
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            //JOptionPane.showMessageDialog(null, "driver load failed"); 
        }
          dbConnection = DriverManager.getConnection(String_url,USER,PASS);
          return dbConnection;
       }

    } 
我在另一个文件中调用了这个方法-

package testpackage;
import java.awt.Rectangle;
import org.openqa.selenium.firefox.FirefoxDriver;
public class testclass {
public static void main (String[] args) throws Exception
{   
DriverManager Connection_getConnection = new DriverManager();
        Connection_getConnection.getConnection("database string url","username","password");
}
}

注意-我使用alert来调试问题并递归查找函数调用,因为我一个接一个地收到警报。

您的
DriverManager.getConnection()
方法包括调用
DriverManager.getConnection()
,它包括调用
DriverManager.getConnection()


这是因为您选择了与标准的
java.sql.DriverManager.getConnection()

相同的方式来命名类和方法。看起来您正在调用:

dbConnection = DriverManager.getConnection(String_url,USER,PASS);
在返回一个值之前,由于这是您当前使用的方法,您将递归调用此方法,从而导致无限循环


getConnection(…)
方法正在调用永远不会结束的
getConnection(…)
方法,因此
stackoverflowerr
代码将以无限循环结束!!!这就是为什么你的堆栈被填满的原因

修正:

移除

DriverManager.getConnection(String_url,USER,PASS);
从getConnection函数调用将再次调用相同的函数。因此,请将其从调用的
getConnection
函数中删除

dbConnection = DriverManager.getConnection(String_url,USER,PASS);
创建一个无休止的递归。您正在导入java.sql.*但您的调用仍然在类中调用
getConnection()

改为

dbConnection = java.sql.DriverManager.getConnection(String_url,USER,PASS);

为什么您试图重新发明一个轮子,它似乎做了与原始实现完全相同的事情