-1

アドレス帳として機能する GUI プログラムを作成する予定の CS のプロジェクトがあります。プログラムには、連絡先の追加、検索、および削除があります。プログラムは、連絡先の読み取り/保存もできると想定されています。連絡先の読み取りに問題があります。これがその部分のコードです。

PhoneDirectory Contacts = new PhoneDirectory(100);
private static final String DATA_FILE = "records.dat";

private static void readRecords() {
    try {
        FileInputStream fileIn = new FileInputStream(DATA_FILE);
    try (ObjectInputStream in = new ObjectInputStream(fileIn)) {
        Contacts = in.readObject();
    }
    } 
    catch (IOException | ClassNotFoundException e) {
        JOptionPane.showMessageDialog(null, "File does not exist or cannot be read.", "Error", JOptionPane.ERROR_MESSAGE);
  } 

}

ここでは、ユーザーが入力した情報を格納するオブジェクト「連絡先」を作成しました。の行で、Contacts = in.readObject();の行にエラー メッセージが表示されますContacts = in.readObject();Contactsオブジェクトではなく変数であるため、これを取得すると思います。

代わりに連絡先に何を持っているべきですか?

これがプロジェクトの残りのコードです。

メインクラス

package console;

public class Console {

    public static void main(String[] args)
    {
        PhoneBookGUI frame = new PhoneBookGUI();
        frame.setVisible(true);
    }
}

電話帳

package console;

import javax.swing.JOptionPane;

public class PhoneDirectory {
  private PhoneRecord[] records;
  private int numRecords;

  public PhoneDirectory(int size)
  {
      this.records = new PhoneRecord[size];
      this.numRecords = 0;
  }

    public PhoneRecord[] getRecords() {
        return records;
    }

    public int getNumRecords() {
        return numRecords;
    }

    public void searchRecords(String inputName)
    {
        int j;
        for (j=0; j<numRecords; j++) {
            if (records[j].getName().contains(inputName)){
                JOptionPane.showMessageDialog(null, "Name:" + " " +         records[j].getName() + "\nNumber:" +" " + records[j].getNumber(), inputName, JOptionPane.INFORMATION_MESSAGE);
                return;
            }
       }
    }

    public void deleteRecord(String contactName)
    {
        int i;
        for (i=0; i <numRecords;i++) {
            if (records[i].getName().equals(contactName)) {
                records[i] = records[numRecords-1];
                numRecords--;
            }
        }
    }

    public void updateRecord(String contactName, String phoneNumber)
    {
        int k;
        for (k=0; k<numRecords;k++) {
            if (records[k].getName().equals(contactName)) {
            records[k].setNumber(phoneNumber);
            break;
            }
        }
    }

    public void addRecord(PhoneRecord record)
    {
        if (numRecords < records.length) {
            records [numRecords] = record;
            numRecords++;
        }

        if (numRecords > records.length) {
            PhoneRecord [] tempArray = new PhoneRecord [records.length*2];
            for (int m=0; m<records.length; m++) {
                tempArray[m] = records[m];
            }
            records = tempArray;
        }
    }
}

電話記録

    package console;

// Represents a record containing a name and a phone number
class PhoneRecord {
  private String name;
  private String number;

  // Constructor
  public PhoneRecord(String personName, String phoneNumber) {
    name = personName;                       
    number = phoneNumber;
  }

  // Returns the name stored in the record
  public String getName() {
    return name;
  }

  // Returns the phone number stored in the record
  public String getNumber() {
      return number;
  }

  public void setNumber(String num) {
      this.number = num;
  }
}
4

2 に答える 2

1

通常、より具体的なオブジェクトにキャストする必要があります。

PhoneDirectory Contacts = new PhoneDirectory(100);
private static final String DATA_FILE = "records.dat";

private static void readRecords() {
    try {
        FileInputStream fileIn = new FileInputStream(DATA_FILE);
    try (ObjectInputStream in = new ObjectInputStream(fileIn)) {
        Contacts = in.readObject();

次のようにする必要があります。

PhoneDirectory contacts = new PhoneDirectory(100);
private static final String DATA_FILE = "records.dat";

private static void readRecords() {
    try {
        FileInputStream fileIn = new FileInputStream(DATA_FILE);
    try (ObjectInputStream in = new ObjectInputStream(fileIn)) {
        contacts = (PhoneDirectory)in.readObject();  //cast the object!
于 2013-04-29T05:24:34.247 に答える
0

PhoneDirectoryクラスを用意してインターフェイスをPhoneContant実装する必要がありSerializableます。また、dat ファイルをオブジェクトとして読み取るときは、適切なキャスト ステートメントを追加してください。

于 2013-04-29T06:34:38.830 に答える