2014-04-15 7 views
1

NullPointerException이 (자바 FX)

public class Main extends Application { 

    RadioButton chkSort; 
    RadioButton chkOrder; 

    public static void main(String[] args) { 

     launch(args); 
    } 

    public static Comparator<Student> studentIDComparator = new Comparator<Student>() { 
     public int compare(Student std1, Student std2) { 
     String id1 = std1.getID(); 
     String id2 = std2.getID(); 
     return id1.compareToIgnoreCase(id2); 
     } 
     }; 

    public static Comparator<Student> studentNameComparator = new Comparator<Student>() { 
     public int compare(Student std1, Student std2) { 
     String name1 = std1.getName(); 
     String name2 = std2.getName(); 
     return name1.compareToIgnoreCase(name2); 
     } 
     }; 

    public static Comparator<Student> studentLastnameComparator = new Comparator<Student>() { 
     public int compare(Student std1, Student std2) { 
     String last1 = std1.getLastName(); 
     String last2 = std2.getLastName(); 
     //ascending order 
     return last1.compareToIgnoreCase(last2); 
     } 
     //return fruitName2.compareTo(fruitName1); //descending order 
     }; 

    public static Comparator<Student> studentGPAComparator = new Comparator<Student>() { 
     public int compare(Student std1, Student std2) { 
     String gpa1 = std1.getGPA(); 
     String gpa2 = std2.getGPA(); 
     return gpa1.compareTo(gpa2); 
     } 
     }; 

    @Override 
    public void start(Stage primaryStage) throws Exception{ 
     primaryStage.setTitle("Student Sorting"); 
     SplitPane splitPane = new SplitPane(); 
     GridPane grid1 = new GridPane(); 
     GridPane grid2 = new GridPane(); 

     grid1.setAlignment(Pos.TOP_LEFT); 
     grid1.setVgap(10); 
     grid1.setHgap(10); 
     grid1.setPadding(new Insets(25,25,25,25)); 
     grid2.setPadding(new Insets(25,25,25,25)); 
     Scene scene = new Scene(splitPane, 700, 500); 
     primaryStage.setScene(scene); 

     Text title = new Text("Student Sorting"); 
     title.setFont(Font.font("Comic Sans MS", FontWeight.BOLD, 20)); 

     Text sortBy = new Text("Sort by :"); 
     sortBy.setFont(Font.font("Calibri", FontWeight.BOLD, 14)); 

     final ToggleGroup toSelect = new ToggleGroup(); 
     final ToggleGroup toOrder = new ToggleGroup(); 

     RadioButton idBtn = new RadioButton("ID"); 
     idBtn.setToggleGroup(toSelect); 

     RadioButton nameBtn = new RadioButton("Name"); 
     nameBtn.setToggleGroup(toSelect); 

     RadioButton lastNameBtn = new RadioButton("Last Name"); 
     lastNameBtn.setToggleGroup(toSelect); 

     RadioButton gpaBtn = new RadioButton("GPA"); 
     gpaBtn.setToggleGroup(toSelect); 

     Text order = new Text("Order :"); 
     order.setFont(Font.font("Calibri", FontWeight.BOLD, 14)); 

     RadioButton ascBtn = new RadioButton("Ascending"); 
     ascBtn.setToggleGroup(toOrder); 
     ascBtn.setUserData("asc"); 

     RadioButton desBtn = new RadioButton("Descending"); 
     desBtn.setToggleGroup(toOrder); 
     desBtn.setUserData("des"); 

     Button start = new Button("Sort"); 
     start.setPrefSize(170, 20); 

     final TextArea text = new TextArea(); 
     text.setMinSize(500, 400); 

     grid1.add(title, 0, 0); 
     grid1.add(sortBy, 0, 2); 
     grid1.add(idBtn, 0, 3); 
     grid1.add(nameBtn, 0, 4); 
     grid1.add(lastNameBtn, 0, 5); 
     grid1.add(gpaBtn, 0, 6); 
     grid1.add(order, 0, 8); 
     grid1.add(ascBtn, 0, 9); 
     grid1.add(desBtn, 0, 10); 
     grid1.add(start, 0, 13); 

     grid2.add(text, 2, 2); 
     splitPane.getItems().addAll(grid1, grid2); 
     splitPane.setDividerPositions(0.3); 

     toSelect.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){ 
      @Override 
      public void changed(ObservableValue<? extends Toggle> value, 
        Toggle t1, Toggle t2) { 
       chkSort = (RadioButton) t2.getToggleGroup().getSelectedToggle(); 
      }   
     }); 

     toOrder.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){ 
      @Override 
      public void changed(ObservableValue<? extends Toggle> value, 
        Toggle t1, Toggle t2) { 
       chkOrder = (RadioButton) t2.getToggleGroup().getSelectedToggle(); 
      } 

     }); 

     start.setOnAction(new EventHandler<ActionEvent>(){ 

      @Override 
      public void handle(ActionEvent arg0) { 
       String temp =text.getText().toString(); 
       String[] splitLine = temp.split("\n"); 
       Student[] stdData = new Student[splitLine.length]; 
       for(int i=0; i<splitLine.length; i++){ 
        String[] stdDataStr = splitLine[i].split(" "); 
        if(stdDataStr[i].length() <4 || stdDataStr[i].equals(null)){ 
         text.setText("Invalid input"); 
         break; 
        } 
        else { 

         stdData[i].setID(stdDataStr[0]); 
         stdData[i].setName(stdDataStr[1]); 
         stdData[i].setLastName(stdDataStr[2]); 
         stdData[i].setGPA(stdDataStr[3]); 

        } 
       } 

       if(chkSort.getText().toString().equals("ID")){ 
        if(chkOrder.getText().toString().equals("Ascending")){ 
         Student.sort(stdData,studentIDComparator , true); 
        } 
        else{ 
         Student.sort(stdData, studentIDComparator, false); 
        } 
       } 
       else if(chkSort.getText().toString().equals("Name")){ 
        if(chkOrder.getText().toString().equals("Ascending")){ 
         Student.sort(stdData, studentNameComparator, true); 
        } 
        else{ 
         Student.sort(stdData, studentNameComparator, false); 
        } 
       } 
       else if(chkSort.getText().toString().equals("Last Name")){ 
        if(chkOrder.getText().toString().equals("Ascending")){ 
         Student.sort(stdData, studentLastnameComparator, true); 
        } 
        else{ 
         Student.sort(stdData, studentLastnameComparator, false); 
        } 
       } 
       else if(chkSort.getText().toString().equals("GPA")){ 
        if(chkOrder.getText().toString().equals("Ascending")){ 
         Student.sort(stdData, studentGPAComparator, true); 
        } 
        else{ 
         Student.sort(stdData, studentGPAComparator, false); 
        } 
       } 

       for(int i=0 ; i<stdData.length; i++){ 
        text.setText(stdData[i].getID()+" "+stdData[i].getName()+" "+stdData[i].getLastName()+" "+stdData[i].getGPA()); 
       } 
      }  
     }); 

     primaryStage.show();   
    } 
} 

이 Student.java

public class Student { 
    private String stdID; 
    private String stdName; 
    private String stdLastName; 
    private String stdGPA; 

    public Student(String id, String name, String lastName, String gpa) { 
     super(); 
     this.stdID = id; 
     this.stdName = name; 
     this.stdLastName = lastName; 
     this.stdGPA = gpa; 
     } 

    public String getID() {return stdID;} 
    public void setID(String id) { this.stdID =id; } 
    public String getName() {return stdName;} 
    public void setName(String name) { this.stdName= name; } 
    public String getLastName() {return stdLastName;} 
    public void setLastName(String lastName) { this.stdLastName = lastName; } 
    public String getGPA() {return stdGPA;} 
    public void setGPA(String gpa) { this.stdGPA = gpa; } 

    public static void sort(Student[] std, Comparator<Student> c, boolean asc){ 
     Student tmp; 
     for (int i=0; i<std.length-1;i++){ 
      for(int j=i+1;j<std.length;j++) 
       if((c.compare(std[i],std[j]) >0 && asc==true) ||(c.compare(std[i],std[j]) <0 && asc==false)) { 
        tmp = std[i]; std[i] = std[j]; std[j] = tmp; 
       } 
     } 
    } 

} 

NullPointerException이이

else { 
stdData[i].setID(stdDataStr[0]); 
stdData[i].setName(stdDataStr[1]); 
stdData[i].setLastName(stdDataStr[2]); 
stdData[i].setGPA(stdDataStr[3]); 
} 

을 표시 곳입니다이 내 자바 SRC입니다 Main.java

입니다 그때 내가 setID, setName, setLastName 및 setGPA하려고하면 NullPointerException 얻을 실행하려고하면 내가 어떻게해야합니까?

덕분에 모든

+0

입력 형식 >> ID 이름 성 GPA – user12133

+0

이것은 많은 관련성이없는 코드입니다. 범위를 좁히고 그것이 잘못 될 수 있음을 진술하십시오. –

+0

[Null Pointer Exception이란 무엇이며 어떻게 고칠 수 있습니까?] (http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do) -i-fix-it) – Mogsdad

답변

1

당신은 학생들의 배열로 stdData을 초기화하고 있지만, 각 항목에 새로운 학생을 생성하지 않는 한 다음 존재하지 않는 경우 항목에서 학생에 액세스하려고 .

당신은 선 이후 어떻게해야하나요 : 당신이로 계속 다음

stdData[i] = new Student(); 

및 - 나중에 코드에서 당신이 할 수 있습니다 :

Student[] stdData = new Student[splitLine.length]; 
    for(int i=0; i<splitLine.length; i++){ 

가 초기화를 추가 물건 같은 :

stdData[i].setID(stdDataStr[0]); 

팁 :
질문을 게시 할 때 관련 코드 만 게시하려고하면 스택 추적을 추가하고 컴파일/런타임 오류를 유발하는 행을 표시하십시오.

+0

+1에 대한 ..... – xyz