Java 类声明导致空指针异常
我的程序因空指针异常而崩溃 堆栈跟踪的剪切:Java 类声明导致空指针异常,java,calendar,nullpointerexception,proguard,Java,Calendar,Nullpointerexception,Proguard,我的程序因空指针异常而崩溃 堆栈跟踪的剪切: java.lang.NullPointerException at com.my.GRTRecTimeSortComparator.compare(SourceFile:15) 那很好。但我的问题是第15行是类声明: 15 public class GRTRecTimeSortComparator implements Comparator<GRTRecord> { 16 @Override 17 public int
java.lang.NullPointerException
at com.my.GRTRecTimeSortComparator.compare(SourceFile:15)
那很好。但我的问题是第15行是类声明:
15 public class GRTRecTimeSortComparator implements Comparator<GRTRecord> {
16 @Override
17 public int compare(GRTRecord rec1, GRTRecord rec2) {
18
19 int returnVal=rec1.getRecordCalendar().compareTo(rec2.getRecordCalendar());
20 return returnVal;
21 }
22}
15公共类GRTRectimestorComparator实现Comparator{
16@Override
17公共整数比较(GRTRecord rec1、GRTRecord rec2){
18
19 int returnVal=rec1.getRecordCalendar().compareTo(rec2.getRecordCalendar());
20返回值;
21 }
22}
它调用了Compare函数,但我也不认为这有什么问题。每个记录都有一个唯一的日历分配给它
有什么想法吗?我做错了什么
编辑:响应查询:
不,这个类本身没有什么奇怪的,除了我写的这个事实
我正在使用Proguard。也许是混淆错误地替换了东西
我现在正在写测试记录。它们不应为空,日历也不应为空;我使用它们之前,立即,并获得良好的效果
也许我只是错误地传递了ArrayList
编辑2:
插入到类中的日志行永远不会运行。
无论我向类添加什么或执行什么操作,空指针始终解析为类声明行
移除了Proguard模糊,仍然没有骰子
我真的很沮丧
编辑3:
对于未来用户:
Proguard会破坏堆栈跟踪。这就是造成上述情况的原因。如果遇到问题,请删除proguard
原因实际上是数据集中的一条损坏记录。在这种情况下,最好将调试器设置为出错时中断。您将确切地知道NPE的位置。在这种情况下,最好将调试器设置为出错时中断。您将确切地知道您的NPE在哪里。我强烈怀疑调试信息只是不同步。将日志记录放入您的
compare
方法中。我将(按顺序)记录:
rec1
rec2
rec1.getRecordCalendar()
rec2.getRecordCalendar()
- 您是否正在使用Hibernate或类似的工具为您创建代理
- 这是一个内部类吗
compare
方法中。我将(按顺序)记录:
rec1
rec2
rec1.getRecordCalendar()
rec2.getRecordCalendar()
- 您是否正在使用Hibernate或类似的工具为您创建代理
- 这是一个内部类吗
compare()
方法,但您正在尝试访问compareTo()
您未实施的可比较方法。
在您的程序中:
比较值以引用形式返回,无法返回到基元类型。如果您正在实现comparator接口,则只能使用
compare()
方法,但您正在尝试访问未实现的comparable的compareTo()
方法。
在您的程序中:
比较值以引用形式返回,不能返回到基元类型。ProGuard尝试尽可能保留调试信息,但这在技术上并不总是可行的。例如,如果方法getRecordCalendar内联,则该方法引发的任何异常现在都会从调用站点引发。ProGuard会尽可能多地保留调试信息,但这在技术上并不总是可行的。例如,如果方法getRecordCalendar内联,则该方法引发的任何异常现在都会从调用站点引发。最有可能的情况是,您读取的源代码与编译代码中的堆栈跟踪不同步。尝试从clean构建,然后重新运行。最可能的情况是,您正在读取的源代码与编译代码中的堆栈跟踪不同步。请尝试从“干净”构建,然后重新运行。无休眠。除了使用Proguard,我不相信有任何异常。这一切都在一个Netbeans Paltform应用程序中,发生在一个Swingworker中。@Sheriff:你有没有加入我建议的日志记录?如果Proguard弄乱了堆栈跟踪,我一点也不会感到惊讶。我把日志记录放进去了。但它从未运行过。我禁用了Proguard,这将堆栈跟踪故障转移到
Compare
函数,正如人们所期望的那样。重新启用日志记录以查看现在发生的情况。这次日志记录工作正常。它们都有分配给它们的值。因为CompareTo函数是一个固有的日历函数,所以我认为它应该可以工作。但是我还要玩一些。@Sheriff:即使在日志记录之后,异常仍然被抛出吗?没有休眠。除了使用Proguard,我不相信有任何异常。这一切都在一个Netbeans Paltform应用程序中,发生在一个Swingworker中。@Sheriff:你有没有加入我建议的日志记录?如果Proguard弄乱了堆栈跟踪,我一点也不会感到惊讶。我把日志记录放进去了。但它从未运行过。我禁用了Proguard,这将堆栈跟踪故障转移到Compare
函数,正如人们所期望的那样。重新启用日志记录以查看现在发生的情况。日志记录工作正常