2012-11-13 2 views
1

여기 내 응용 프로그램입니다. 개체를 저장하고 열 때 문제가 있습니다. 저장하려고하면 save.writeObject (firstName)의 변수를 변수로 해석 할 수 없다는 메시지가 나타납니다.저장 및 열기

문제는 ActionPeformed 블록에 있습니다 오류가 당신에게 해당 인덱스를 말하고있다

import java.awt.*; 
import java.awt.event.*; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
    import java.io.Serializable; 

import javax.swing.*; 
import javax.swing.event.*; 
import javax.swing.border.*; 
import java.util.*; 

    public class ClassRoomFrameTest 
{ 
public static void main(String[] args) 
{ 
    ClassRoomFrame frame = new ClassRoomFrame(); 
    frame.setSize(600,600); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    frame.setVisible(true); 
    frame.setResizable(false); 
    frame.setLocationRelativeTo(null); 
} 
} 
class ClassRoomFrame extends JFrame implements ActionListener 
{ 
private JPanel mainPanel = new JPanel(); 
private JPanel deptPanel = new JPanel(new GridLayout(2,3)); 
private JPanel studentPanel = new JPanel(new GridLayout(2,5)); 
private JPanel displayPanel = new JPanel(new BorderLayout()); 
    private JPanel buttonPanel = new JPanel(new GridLayout(1,2)); 
    private JPanel menuBar = new JPanel(); 

private JTextArea textArea = new JTextArea(); 
private JScrollPane scrollPane = new JScrollPane(textArea); 

private JLabel classLocationLabel = new JLabel("Class Location"); 
private JLabel classRoomLabel  = new JLabel("Class Room Number"); 
private JLabel classCapacityLabel = new JLabel("Class Capacity"); 
private JTextField classLocationField = new JTextField(); 
private JTextField classRoomField  = new JTextField(); 
private JTextField classCapacityField = new JTextField(); 

private JLabel studentFNameLabel = new JLabel("First name"); 
private JLabel studentLNameLabel = new JLabel("Last name"); 
private JLabel studentIDLabel = new JLabel("ID Number"); 
private JLabel studentMajorLabel = new JLabel("Major"); 
private JLabel studentCreditsLabel = new JLabel("Credits"); 
private JTextField studentFNameField = new JTextField(); 
private JTextField studentLNameField = new JTextField(); 
private JTextField studentIDField = new JTextField(); 
private JTextField studentMajorField = new JTextField(); 
private JTextField studentCreditsField = new JTextField(); 

private JButton addButton  = new JButton("Add"); 
private JButton displayButton = new JButton("Display"); 

private JMenuBar menu = new JMenuBar(); 
private JMenu fileMenu = new JMenu("File"); 
private JMenuItem save = new JMenuItem("Open"); 
private JMenuItem open = new JMenuItem("Save"); 

private JFileChooser chooser = new JFileChooser(); 

Classroom room = null; 


public ClassRoomFrame() 
{ 
    deptPanel.setPreferredSize(new Dimension(600,50)); 
    deptPanel.setBorder(new EmptyBorder(new Insets(5,15,5,15))); 

    deptPanel.add(classLocationLabel); 
    deptPanel.add(classRoomLabel); 
    deptPanel.add(classCapacityLabel); 
    deptPanel.add(classLocationField); 
    deptPanel.add(classRoomField); 
    deptPanel.add(classCapacityField); 

    fileMenu.add(fileMenu); 
    fileMenu.add(open); 
    fileMenu.add(save); 

    menu.add(fileMenu); 

    studentPanel.setBorder(new EmptyBorder(new Insets(5,15,5,15))); 
    studentPanel.setPreferredSize(new Dimension(600,50)); 
    studentPanel.setBorder(new EmptyBorder(new Insets(5,15,5,15))); 

    studentPanel.add(studentFNameLabel); 
    studentPanel.add(studentLNameLabel); 
    studentPanel.add(studentIDLabel); 
    studentPanel.add(studentMajorLabel); 
    studentPanel.add(studentCreditsLabel); 
    studentPanel.add(studentFNameField); 
    studentPanel.add(studentLNameField); 
    studentPanel.add(studentIDField); 
    studentPanel.add(studentMajorField); 
    studentPanel.add(studentCreditsField); 

    scrollPane.setBorder(new BevelBorder(BevelBorder.LOWERED)); 
    scrollPane.setPreferredSize(new Dimension(600,450)); 
    textArea.setBorder(new EmptyBorder(new Insets(5,15,5,15))); 

    buttonPanel.setBorder(new BevelBorder(BevelBorder.RAISED)); 
    buttonPanel.setPreferredSize(new Dimension(600, 50)); 
    buttonPanel.add(addButton); 
    buttonPanel.add(displayButton); 
    addButton.addActionListener(this); 
    addButton.setActionCommand("Add"); 
    displayButton.addActionListener(this); 
    displayButton.setActionCommand("Display"); 

    open.addActionListener(this); 
    open.setActionCommand("Open"); 
    save.addActionListener(this); 
    save.setActionCommand("Save"); 

    mainPanel.add(deptPanel);  
    mainPanel.add(studentPanel);   
    mainPanel.add(scrollPane); 


    add(menu, BorderLayout.NORTH); 
    add(mainPanel, BorderLayout.CENTER); 
    add(buttonPanel, BorderLayout.SOUTH);  
} 

@SuppressWarnings("unused") 
public void actionPerformed(ActionEvent e) 
{ 
    /*---> HERE */if(e.getActionCommand().equals("Save")); 
    { 
     FileOutputStream saveFile = null; 
     ObjectOutputStream save = null; 

     try 
     { 
      saveFile = new FileOutputStream("ObjectData.txt"); 
      save = new ObjectOutputStream(saveFile); 

      /*--->Error*/ save.writeObject(index); 

      save.writeObject(new Classroom()); 
     } catch (FileNotFoundException e1) 
     { 

      e1.printStackTrace(); 
     } catch (IOException e1) 
     { 

      e1.printStackTrace(); 
     } 
     finally 
     { 
      try {saveFile.close(); 

      }catch(Exception exc){ 
       System.out.println(exc.getMessage()); 
      } 
      }  

    } 
    /*---> Here*/if (e.getActionCommand().equals("Open")) 
    { 
     ObjectInputStream in = null; 
     int returnVal = chooser.showOpenDialog(ClassRoomFrame.this); 

     if (returnVal == JFileChooser.APPROVE_OPTION) 
     { 
      File file = chooser.getSelectedFile(); 
      try { 
     in = new ObjectInputStream(new FileInputStream(file)); 
      } catch (FileNotFoundException e1) 
      { 

       e1.printStackTrace(); 
      } catch (IOException e1) 
      { 

       e1.printStackTrace(); 
      } 
     } 
      try { 
       Student st = (Student)in.readObject(); 
       Classroom cs = (Classroom)in.readObject(); 
       System.out.println(st); 
       System.out.println(cs); 

      } catch (IOException e1) { 

       e1.printStackTrace(); 
      } catch (ClassNotFoundException e1) { 

       e1.printStackTrace(); 
      } 
      try{in.close();} 
      catch(Exception err){err.getMessage();} 
    } 

    if(e.getActionCommand().equals("Add")) 
    { 
     if(room == null) 
     { 
      room = new Classroom(classLocationField.getText(), 
    Integer.parseInt(classRoomField.getText()), 
      Integer.parseInt(classCapacityField.getText())); 
      room.addStudent(
        new Student(studentFNameField.getText(),  
        studentLNameField.getText(), 
        studentIDField.getText(), 
        studentMajorField.getText(), 
       Integer.parseInt(studentCreditsField.getText()))); 

      classLocationField.setEditable(false); 
      classRoomField.setEditable(false); 
      classCapacityField.setEditable(false); 
      studentFNameField.setText("");  
      studentLNameField.setText(""); 
      studentIDField.setText(""); 
      studentMajorField.setText(""); 
          studentCreditsField.setText(""); 
      textArea.setText("Class and first student added."); 
     } 
     else 
     { 
      room.addStudent(
        new Student(studentFNameField.getText(),  
        studentLNameField.getText(), 
        studentIDField.getText(), 
        studentMajorField.getText(), 
       Integer.parseInt(studentCreditsField.getText()))); 
      textArea.setText("Next student added."); 

      studentFNameField.setText("");  
      studentLNameField.setText(""); 
      studentIDField.setText(""); 
      studentMajorField.setText(""); 
     studentCreditsField.setText(""); 
     }   
    } 
    else if(e.getActionCommand().equals("Display")) 
    { 
     if (room != null) 
     { 
      textArea.setText(room.toString()); 
     } 
     else 
     { 
      textArea.setText("Nothing to display"); 
     } 
    } 
} 
} 

class Student implements Serializable 
{ 
public String firstName, lastName, studentIdNumber, studentMajor; 
public int totalCourseCredits; 

//----------------------------------------------------------------- 
// Create an empty studentusing a default constructor. 
//----------------------------------------------------------------- 
public Student() 
{ 
} 
//----------------------------------------------------------------- 
// Creates a Student with the specified information. 
//----------------------------------------------------------------- 
public Student (String name1, String name2, String identification, 
       String myMajor, int myTotalCredits) 
{ 
    firstName = name1; 
    lastName = name2; 
    studentIdNumber = identification; 
    studentMajor = myMajor; 
    totalCourseCredits = myTotalCredits; 
} 

//----------------------------------------------------------------- 
// Gets and sets first name. 
//----------------------------------------------------------------- 
public void setFirstName() 
{ 
    Scanner scan = new Scanner (System.in); 

    System.out.println ("Enter your First Name: "); 
    firstName = scan.nextLine(); 
} 

//----------------------------------------------------------------- 
// Gets and sets last name. 
//----------------------------------------------------------------- 
public void setLastName() 
{ 
    Scanner scan = new Scanner (System.in); 

    System.out.println ("Enter your Last Name: "); 
    lastName = scan.nextLine(); 
} 

//----------------------------------------------------------------- 
// Gets and sets Total Course Credits. 
//----------------------------------------------------------------- 
public void setTotalCredits() 
{ 
    Scanner scan = new Scanner (System.in); 

    System.out.println ("Enter your Total Credits: "); 
    totalCourseCredits = scan.nextInt(); 
} 

//----------------------------------------------------------------- 
// Gets and sets Student ID Number. 
//----------------------------------------------------------------- 
public void setIdNumber() 
{ 
    Scanner scan = new Scanner (System.in); 

    System.out.println ("Enter your ID Number: "); 
    studentIdNumber = scan.nextLine(); 
} 


//----------------------------------------------------------------- 
// Gets and sets Student Major. 
//----------------------------------------------------------------- 
public void setMajor() 
{ 
    Scanner scan = new Scanner (System.in); 

    System.out.println ("Enter your Major: "); 
    studentMajor = scan.nextLine(); 
} 

public String toString() 
{ 
    String s = "First name:  " + firstName + "\n" + 
       "Last name:  " + lastName + "\n" + 
       "StudentID:  " + studentIdNumber + "\n" + 
       "Student Major: " + studentMajor + "\n" + 
       "Course Creidts: " + totalCourseCredits + "\n"; 
    return s; 
} 
} 

    class Classroom implements Serializable 
    { 

    private Student[] classRoster; 
private int index = 0; 
    private int capacityStudents, roomNumber; 
    private String buildingLocation; 

    //----------------------------------------------------------------- 
    // Creates an empty Classroom. 
    //----------------------------------------------------------------- 
public Classroom() 
{ 
    capacityStudents = 0; 
    roomNumber = 0; 
    buildingLocation = ""; 
} 

    //----------------------------------------------------------------- 
    // Creates a Classroom with the specified information. 
    //----------------------------------------------------------------- 
public Classroom(String location, int room, int cap) 
{ 
    capacityStudents = cap; 
    roomNumber = room; 
    buildingLocation = location; 
    classRoster = new Student[capacityStudents]; 
} 


    //----------------------------------------------------------------- 
    // Gets and sets Building Location. 
//----------------------------------------------------------------- 
    public void setBuilding() 
{ 
    Scanner scan = new Scanner (System.in); 

    System.out.println ("Enter the Building Location: "); 
    buildingLocation = scan.next(); 
} 

    //----------------------------------------------------------------- 
    // Gets and sets Room Number. 
    //----------------------------------------------------------------- 
public void setRoomNumber() 
{ 
    Scanner scan = new Scanner (System.in); 

    System.out.println ("Enter the Room Number: "); 
    roomNumber = scan.nextInt(); 
} 

    //----------------------------------------------------------------- 
    // Sets Capacity of Students. 
    //----------------------------------------------------------------- 
public void setCapacityStudents() 
{ 
    Scanner scan = new Scanner (System.in); 

    System.out.println ("Enter The Capacity of the Classroom: "); 
    capacityStudents = scan.nextInt(); 
    classRoster = new Student[capacityStudents]; 
} 

    //----------------------------------------------------------------- 
    // Gets Capacity of Students. 
//----------------------------------------------------------------- 
public int getCapacityStudents() 
{ 
    return capacityStudents; 
} 

    //----------------------------------------------------------------- 
// Adds an Individual Student to the Classroom, checking if the 
// capacity of the clasroom is full. 
//----------------------------------------------------------------- 
public void addStudent (Student student) 
{ 
    if(index < capacityStudents) 
    { 
     classRoster[index] = student; 
     index++; 
    } 
    else 
    { 
     System.out.println("Capacity exceeded! - Student cannot be added."); 
    } 
} 

//----------------------------------------------------------------- 
// Adds an Individual Student to the Classroom, checking if the 
// capacity of the clasroom is full. 
//----------------------------------------------------------------- 
    public String toString() 
{ 
    StringBuffer sb = new StringBuffer 
          ("Building:  " + buildingLocation + 
          "\nClass room: " + roomNumber + 
       "\nCapacity: " + capacityStudents + "\n\n" 
           ); 
    for(int i = 0; i < classRoster.length; i++) 
    { 
     if(classRoster[i] != null) 
      sb.append(classRoster[i].toString() + "\n"); 
    } 
    return sb.toString(); 
    } 
    } 
+0

당신은 ObjectOutputStream과 색인을 래핑 할 때 문제가 발생합니까? 'FileOutputStream ("ObjectData.txt"); save = 새 ObjectOutputStream (인덱스); save.writeObject (인덱스); ' –

+0

@Chris 예. 같은 오류. – rogerthat

답변

1

하는 저장 방법의 범위에서 사용할 수 없습니다. 인덱스를 저장하려면 save 메소드에서 save.writeObject(classroom.getIndex())과 같은 작업을 수행해야합니다.

+0

당신은 이클립스가 나에게 그 제안을 주었다는 것을 알았지 만 그것은 이해가되지 않았다. 지금 오류가 발생하지 않으므로 시험해 보겠습니다. getName() 또는 get 메서드가 어떻게 이런 식으로 작동하는지 이해가되지 않았습니다. – rogerthat

+0

이제는 모든 정보를 복원 할 때 readObject()를 다음과 같이 작성해야합니다. Student s = (Student) in.readObject(); 또는 문자열 이름 = (문자열) getName(); textArea는 값이없는 생성자 속성이기 때문에 다시 입력해야합니다. 이름 = null 성 = null 등등 ... – rogerthat

+0

실제로 어떤 데이터를 저장 하시겠습니까? –

1

indexClassRoom 클래스에 변수로 선언했습니다. 그러나 당신은 방법 actionPerformedClassRoomFrame 클래스에서 그것을 사용하려고합니다.

범위가 index이므로 범위를 포함하는 클래스로 제한되므로 ClassRoom 클래스에서 인스턴스를 사용하지 않으면 다른 클래스에서 표시되지 않습니다. 그리고 그게 컴파일러 오류 상태 : cannot find symbol

+0

@Azodius ok. 지금 당장 – rogerthat