0

Java アプリに少し問題があります。私は 2 つのフレームを持っています。メインフレームは MasterFrame と呼ばれます。MasterFrame には、JList + 3 つのボタンが含まれています。

ボタン 1 はブロック シェイプを JList に追加できます。これにより、BlockFrame と呼ばれる 2 番目のフレームが呼び出されます。ブロック形状は、ArrayList 形状コレクションに格納されているオブジェクトです。

MasterFrame には、「test.txt」という .txt ファイルにオブジェクトを保存する [保存] ボタンも含まれています。

MasterFrame には、.txt ファイル「test.txt」を開き、オブジェクトのファイルを読み取り、オブジェクトを JList に戻す [読み込み] ボタンも含まれています。それが実際に間違っていることです。保存機能は機能しますが、ロード方法についてはよくわかりません。オブジェクトの .txt ファイルを実際に読み取っているようですが、Jlist には戻されません。

load メソッドは良いかもしれませんが、オブジェクトを読み取って JList に戻す際に問題が発生する可能性があります。あなたたち以外の誰かが私に手を差し伸べてくれたら嬉しいです:)

import java.io.*;

// My File IO Class
public class ShapeIOController {
private String filename;


public ShapeIOController(){
filename= "C:\\Users\\Lars\\Desktop\\test.txt";
}

// The Save method which will save all my created blocks in "test.txt" file
public void save(ShapeCollection shapecollection){

    try {
    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filename)); 
    out.writeObject(shapecollection);
    out.close();
    }
    catch( IOException e){
    System.out.println("Error occured when trying to open file" + filename);
    e.printStackTrace();
    }
}

// The open file method which will open "test.txt" file, 
// read it's objects and return a ArrayList of shapes "shapecollection"
public ShapeCollection open(ShapeCollection shapecollection){
     try{
     ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename));
     shapecollection= (ShapeCollection) in.readObject();
     in.close();
     }
     catch (ClassNotFoundException e ) {
     System.out.println("Unknown class by reading file" + filename);
     }
     catch ( IOException e ) {
     System.out.println("Error occured when trying to open file " + filename);
     e.printStackTrace();
     }

shapecollection.giveCollection();
return shapecollection;
    }
}

// The code for the save button which works
 private void SaveShapeButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    shapeiocontroller.save(shapecontroller.getShapeCollection());
} 

// The code where it probably is going wrong
 private void LoadShapeButtonActionPerformed(java.awt.event.ActionEvent evt) {
    for(int i = 0; i < shapecontroller.getShapeCollection().giveCollection().size(); i++){
    listModel.addElement(shapecontroller.getShapeCollection().giveShape(i).toString());
    InfoShapeJList.setModel(listModel);
    shapeiocontroller.open(shapecontroller.getShapeCollection());
    }   
}

// List of methods LoadShapeButtonActionPerformed is using:

// getShapeCollection()
public ShapeCollection getShapeCollection() {
    return shapecollection;
}

// giveCollection()
public ArrayList<Shape> giveCollection(){
   return shapecollection;
}

// giveShape()
 public Shape giveShape(int index){
    return shapecollection.get(index);     
 }

// toString()
 public String toString(){
    return "Block: " + length + " " + width + " " + height;
}
4

0 に答える 0