I'm just not sure how to approach this problem. This is the error message I'm getting:
Exception in thread "main" java.lang.NullPointerException
at java.util.Date.getMillisOf(Date.java:939)
at java.util.Date.compareTo(Date.java:959)
at FirstOccComparator.compare(FirstOccComparator.java:11)
at FirstOccComparator.compare(FirstOccComparator.java:1)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.sort(Arrays.java:1210)
at Planner.sort(Planner.java:62)
at Test.main(Test.java:81)
Test @ line 81:
p.sort( new FirstOccComparator() );
where p is a is planner class I made.
Planner.sort @ line 62:
public void sort(Comparator<AbstractEvent> c) {
Arrays.sort(schedule, c);
}
This is my FirstOccComparator class: http://pastebin.com/4FZv4nXf (posted on pastebin because it was too wide and was hard to format here). In this class hasMoreOccurrences() return true/false if there are more reccurrences of the event. nextOccurrence() returns a Date of the next occurrence.
I'm pretty sure what I'm missing here is very simple, I'm still new at interfaces and comparator classes.
Thanks for the help!
There's a null Date object in code you haven't shared...
Just a side note, you can reduce the size of your comparator drastically. Essentially what you're doing is saying
if (x<0)
result = -1;
else if (x==0)
result = 0;
else if (x>0)
result = 1;
Why not just say result = x;
Or in your particular example:
public int compare(AbstractEvent event1, AbstractEvent event2) {
int result = 0;
if (event1.hasMoreOccurrences() && event2.hasMoreOccurrences())
result = event1.nextOccurrence().compareTo(event2.nextOccurrence());
return result;
}
Which can again be shortened (if such is your style) to one line:
public int compare(AbstractEvent event1, AbstractEvent event2) {
return (event1.hasMoreOccurrences() && event2.hasMoreOccurrences()) ? event1.nextOccurrence().compareTo(event2.nextOccurrence()) : 0;
}