如何在调试时处理ClassNotLoadedException?

Dan*_*anM 27 java eclipse debugging remote-debugging

所以我(远程)调试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.

......有谁知道那是什么意思?

Yis*_*hai 26

基本上它意味着类加载器没有加载GridSquare []类.据说这听起来像是调试器中的一个错误.断点与代码的关联似乎有点破碎.您需要重新编译以使行号同步或其他问题正在进行中.在代码中的那一点(在赋值之后),它需要被加载.除非getSquares实际返回一个子类(GridSquareSubclass []),否则JVM可能没有加载它,因为它还不需要它(尚未).

  • 您可以在代码中加载类以强制它发生(比如有一行显式加载类,比如之前创建一个新类型的行).您还可以尝试通过调试器中的evaluate表达式发送指令.(像Class.forName()或Array.newInstance()) (14认同)
  • `Class.forName()`为我工作. (3认同)