2012-10-26 3 views
0

내 코드는 나에게 충분히 좋아 보이지만 nullpointerexception이 계속 발생합니다.Filechooser가있는 NullPointerException?

커밋 D.Frogge 17.25 5.25 0.0 8.0 1.5 8.0 2.25 7.75 0.0 8.0 2.0

이 내 코드의 일부입니다 :

private static BufferedReader br; 
private static StringTokenizer strTkn; 


private static String st, firstName, middleInitial, lastName; 
private static double monRegHours, monOverHours, tuesRegHours, tuesOverHours,  wedRegHours, wedOverHours, 
thurRegHours, thurOverHours, friRegHours, friOverHours; 
private static double totalRegHours, totalOverHours, hourlyWage, regularPay, overtimePay, weeklyPay; 
private static JFileChooser chooser; 


public static void main (String args []) throws IOException 
{ 
chooser(); 
getData(); 
calcpay(); 
printresult(); 
} 


public static void chooser() throws IOException 
{ 
JFileChooser chooser=new JFileChooser(); 
int returnVal = chooser.showOpenDialog(null); 
if(returnVal == JFileChooser.APPROVE_OPTION) 
{ 
    File f = chooser.getSelectedFile(); 
    br=new BufferedReader(new FileReader(f)); 
    st=""; 
    while((st=br.readLine())!=null); 
    { 
    System.out.println ("Data Line = " + st); //print the whole line 
    } 
    } 
    } 


public static void getData() throws IOException 
{ 
strTkn = new StringTokenizer(st, " ."); 

firstName = strTkn.nextToken(); 
middleInitial = strTkn.nextToken(); 
lastName = strTkn.nextToken(); 
hourlyWage = Double.parseDouble(strTkn.nextToken()); 

monRegHours = Double.parseDouble(strTkn.nextToken()); 
monOverHours = Double.parseDouble(strTkn.nextToken()); 

tuesRegHours = Double.parseDouble(strTkn.nextToken()); 
tuesOverHours = Double.parseDouble(strTkn.nextToken()); 

wedRegHours = Double.parseDouble(strTkn.nextToken()); 
wedOverHours = Double.parseDouble(strTkn.nextToken()); 

thurRegHours = Double.parseDouble(strTkn.nextToken()); 
thurOverHours = Double.parseDouble(strTkn.nextToken()); 

friRegHours = Double.parseDouble(strTkn.nextToken()); 
friOverHours = Double.parseDouble(strTkn.nextToken()); 


} 


public static void calcpay() 
{ 
totalRegHours = monRegHours + tuesRegHours + wedRegHours + thurRegHours + friRegHours; 
totalOverHours = monOverHours + tuesOverHours + wedOverHours + thurOverHours + friOverHours; 

overtimePay = round(totalOverHours * (1.5 * hourlyWage)); 
regularPay = round(hourlyWage * totalRegHours); 
weeklyPay = regularPay + overtimePay; 
} 


public static void printresult() 
{ 
System.out.println("Name: " + firstName + " " + middleInitial + " " + lastName); 
System.out.printf("Weekly Pay: " + "$%.2f\n", weeklyPay); 
//this allows me to print $x.50 instead of $x.5, and not have repeating decimals 
} 


public static double round(double num) 
{ 
// rounding to two decimal places 
num *= 100; 
int rounded = (int) Math.round(num); 
return rounded/100.0; 

미안 I는 다음과 같습니다 텍스트 파일을 입력 해요 나쁜 보이는 경우, 내 컴퓨터 그것은 아주 간단한 오류가

답변

1

붙여 복사 할 수 없습니다. while 회 돌이 후에 세미콜론을 삽입했습니다.

while((st=br.readLine())!=null); 

세미콜론을 제거하면 정상적으로 작동합니다.

+0

는 지금은 전혀 while 루프가 필요하지 않습니다 – xSpartanCx

+0

... 데이터 라인의 벌금을 인쇄,하지만 여전히 내가 계산하고 있고 StringTokenizer를 사용하려고하면 나에게 널 포인터를 제공합니다. 그냥 사용 st = br.readLine(); while 루프를 제거하면 제대로 작동합니다. 종료 조건은 루프가 종료 될 때 st = null이되므로 분명히 널 포인터 예외가 발생합니다. –

+0

이제 작동합니다. 고맙습니다! – xSpartanCx