Java 不能初始化类_java.lang.NoClassDefFoundError:无法初始化类XXX

在Java中,遇到PropHolder类的NoClassDefFoundError,可能源于静态初始化期间的异常处理不当。检查静态代码块,确保正确处理文件读取或资源加载异常,以解决Linux服务器部署问题。
摘要由CSDN通过智能技术生成

问题

public class PropHolder {

public static Properties prop;

static {

//code for loading properties from file

}

}

// Referencing the class somewhere else:

Properties prop = PropHolder.prop;

class PropHolder是我自己的一类。该类驻留在主类的相同JAR文件中。所以这不应该因为类路径中缺少任何JAR。

当我通过jar tf myjarfile查看JAR文件时,我可以看到PropHolder.class列在那里。

顺便说一句:代码在我的本地机器上正常运行。但是当我将一些脚本部署到Linux服务器上时无法工作。所以我认为这不是代码的问题。但出于某种原因。部署过程很难跟踪。

可能是什么问题呢?

#1 热门回答(150 赞)

我最好的选择是这里有一个问题:

static {

//code for loading properties from file

}

它会出现一些未捕获的异常,并传播到试图加载该类的实际ClassLoader。我们需要一个堆栈跟踪来确认这一点。

创建PropHolder.propstatic变量时发生的那种情况。

#2 热门回答(92 赞)

你得到的是ajava.lang.NoClassDefFoundError,这并不意味着你的班级丢失了(在这种情况下你得到ajava.lang.ClassNotFoundException)。尝试读取类时,ClassLoader在读取类定义时遇到错误。

在你的静态初始化程序中放置一个try / catch并查看异常。如果你在那里阅读了一些文件并且它与你的本地环境不同,则很可能是问题的原因(可能找不到文件,没有权限等)。

#3 热门回答(24 赞)

NoClassDefFoundError没有提供关于静态块内部出错的线索。在静态初始化代码中始终有这样的块是一个好习惯:

static {

try {

... your init code here

} catch (Throwable t) {

LOG.error("Failure during static initialization", t);

throw t;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值