The problem is that your code is calling readLine twice. Once in the while loop and then again inside the while loop. Remember that each time you call readLine you have to store the value because it will pull the line right out of the stream and advance the file pointer. So what is happening is that you are advancing the pointer in the while loop condition and then reading it again in the loop. Well if the while loop reaches the end of file in the while condition, when you call it in the loop you are going to get your null exception because there is nothing left to read.
Try something along this line for your while loop...
java
String line = "";
while ((line = reader.readLine()) != null)
{
hand_rank = Poker.ParseHand(line, pokerGame);
}
Here we are reading the line from the file directly into the line variable and that is being compared to null. If all is ok, then we go ahead and use the line in the loop.
Notice we have only one read per iteration of the loop and when we reach the end of the file, the while loop will be null and terminate. The way you had it the while loop would read the last line, enter the loop, then try to read again.
Hope this makes sense.
"At DIC we be file line storing code ninjas... we also store away money, arms, food and an occasional woman. Ok I lied about the woman because we can't get a date if our lives depended on it."