28

所以我(远程)在 Eclipse 中调试一个 java/jboss 应用程序,逐行执行。有一次,一个GridSquare对象数组(GridSquare是一个相当简单的独立类,包含一些属性和方法)由方法调用创建,即:

GridSquare[] squares = this.theGrid.getSquares(14, 18, 220, 222);

...虽然当我实际执行代码时,squares数组确实填充了GridSquare对象,但在单步执行代码和调试时我得到了一些奇怪的东西。在上面显示的赋值之后的行上的断点处,如果我尝试查看squares数组,而不是值,我会得到这个:

org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array.

...有人知道那是什么吗?

4

6 回答 6

27

基本上这意味着类加载器没有加载 GridSquare[] 类。话虽这么说,这在某种程度上听起来像是调试器中的一个错误。与代码的断点关联似乎略有破坏。您需要重新编译以使行号同步,或者出现其他问题。在代码中的那个点(在分配之后)它需要被加载。除非 getSquares 实际上返回一个子类 (GridSquareSubclass[]),此时 JVM 可能还没有加载它,因为它(还)不需要它。

于 2009-09-02T14:06:24.710 回答
1

我遇到了这个错误,因为我正在对使用反射的代码进行单元测试。我制作了一个特殊的类来测试代码的所有功能。Junit 显然为测试类使用了一个单独的类加载器(这很有意义),所以我的代码无法对该类使用反射。我得到的堆栈跟踪非常通用(java.lang.InstantiationException),但是当我在调试模式下检查时,异常对象本身有更多细节(org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException)这使我得出了这个结论。

所以我将特殊类移动到主类加载器(通过将文件从 src/test/java 移动到 src/main/java)并且它工作正常。我不喜欢这个解决方案,但我无法找到替代方案。就我而言,这没什么大不了的,但我可以看到这对其他人来说可能是一个问题。

于 2017-06-29T15:40:47.370 回答
0

当您有一个子类的类变量隐藏父类的变量时,我已经在 Eclipse 中看到了这种情况。不知何故,这使 Eclipse 感到困惑(无论如何通常都是一个坏主意:)。例如:

class A {
   private String a;
}

class B extends A {
   public String a;
}
于 2013-01-29T02:53:12.753 回答
0
//Give a SIZE to the array:
GridSquare[] squares = GridSquare[this.theGrid.size()];

//Fill each element of the array with the object constructor to avoid the null value
for(int i=0; i<this.theGrid.size(); i++){
    squares[i] = new GridSquare();
    squares[i] = this.theGrid.getSquares(14, 18, 220, 222);
}
于 2015-09-30T13:58:45.173 回答
-1

通过初始化 GridSquare 将解决问题。方格 =新 GridSquare();

于 2015-07-13T09:53:35.423 回答
-3

我遇到了同样的问题,我刚刚创建了一个公共静态 void main 方法,创建了相同类型的对象并运行为 java 应用程序,然后我删除了 main 方法,它现在可以正常工作了。

于 2015-01-24T02:17:11.117 回答