java.lang.ClassCastException:java.lang.StackOverflowError无法强制转换为java.lang.Exception

Gan*_*hja 1 java selenium

实际上在执行我的java程序时面临下面提到的错误

  Exception in thread "pool-1-thread-1" java.lang.ClassCastException: java.lang.StackOverflowError cannot be cast to java.lang.Exception
Run Code Online (Sandbox Code Playgroud)

实际上我有一个名为Test_A的java类,它包含以下名为Login()和Logout()的方法,并有另一个名为Test_B的java类,其中包含方法VerifyValidUser().

class Test_A {

  Test_B b = new Test_B();

  public void login()
  {
     driver.findElement(By.name("userName")).sendKeys(userName);
     driver.findElement(By.name("password")).sendKeys(password);
     driver.findElement(By.name("login")).click();

     b.verifyLoginValidUser();
  }   

  public void logout()
  {
     driver.findElement(By.linkText("SIGN-OFF")).click();
  }
}

class Test_B {

Test_A a = new Test_A()

 public void verifyLoginValidUser()
 {
    if(isElementPresent(By.linkText("SIGN-OFF"))) 
    {
    }
    a.logout();
 }  }
Run Code Online (Sandbox Code Playgroud)

因此,在执行上面的代码时,它会引发我上面提到的错误消息

任何人都可以告诉我背后的原因

谢谢

实际Stacktrace:

Exception in thread "pool-1-thread-1" java.lang.ClassCastException: java.lang.StackOverflowError cannot be cast to java.lang.Exception
    at supportlibraries.DriverScript.driveTestExecution(DriverScript.java:106)
    at allocator.ParallelRunner.invokeTestScript(ParallelRunner.java:60)
    at allocator.ParallelRunner.run(ParallelRunner.java:41)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

那么堆栈溢出的原因很简单:

class Test_A {
  Test_B b = new Test_B();
}

class Test_B {
  Test_A a = new Test_A();
}
Run Code Online (Sandbox Code Playgroud)

构造一个Test_A涉及构造实例的实例Test_B,包括构造一个实例Test_A等.你应该重新设计你的类以消除这种循环依赖.(有一些替代方案可以保持依赖关系,但是添加参数化构造函数 - 虽然这些可以工作,但打破依赖关系会更好.)

ClassCastException大概是一些代码破位铸造ThrowableException-不幸的是,我们不能告诉那里的代码,破位是没有堆栈跟踪.它甚至可能不是你的代码.