实际上在执行我的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)
那么堆栈溢出的原因很简单:
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大概是一些代码破位铸造Throwable到Exception-不幸的是,我们不能告诉那里的代码,破位是没有堆栈跟踪.它甚至可能不是你的代码.
| 归档时间: |
|
| 查看次数: |
3832 次 |
| 最近记录: |