0

エラー:

java.lang.ClassNotFoundException: testprocedure.tp$3 at java.net.URLClassLoader$1.run(不明なソース) at java.net.URLClassLoader$1.run(不明なソース) at java.security.AccessController.doPrivileged(Native Method) at java .net.URLClassLoader.findClass(不明なソース) の java.lang.ClassLoader.loadClass(不明なソース) で sun.misc.Launcher$AppClassLoader.loadClass(不明なソース) で java.lang.ClassLoader.loadClass(不明なソース) で java. .lang.Class.forName0(Native Method) の java.lang.Class.forName(未知のソース) の java.io.ObjectInputStream.resolveClass(未知のソース) java.io.ObjectInputStream.readNonProxyDesc(未知のソース) の java.io .ObjectInputStream.readClassDesc(不明なソース) java.io.ObjectInputStream.readOrdinaryObject(不明なソース) で java.io.java.io.ObjectInputStream.defaultReadFields の ObjectInputStream.readObject0 (不明なソース) java.io.ObjectInputStream.readSerialData (不明なソース) で java.io.ObjectInputStream.readOrdinaryObject (不明なソース) で java.io.ObjectInputStream readObject0 (未知のソース) で java.io.ObjectInputStream.readObject (未知のソース) で core.ProcedureSetup.load (ProcedureSetup.java:57) で core.Engine.main (Engine.java:25) でProcedureSetup.load(ProcedureSetup.java:57) が core.Engine.main(Engine.java:25) にあるProcedureSetup.load(ProcedureSetup.java:57) が core.Engine.main(Engine.java:25) にある

オブジェクトをインスタンス化し、クラス "tp" から "ProcedureSetup" の "save" メソッドを呼び出します。

ProcedureSetup ps=new ProcedureSetup(new Procedure(){ public void doStuff(){ System.out.println("Stuff is being done"); }});
ps.save();

ただし、必要なコードがすべて「tp」である別のプログラムのコレクションからロードします

ProcedureSetup ps=new ProcedureSetup();
ps.load();

クラス内でのオブジェクトの保存と読み込み:

public void load(){
    String path=Operator.persistentGetFile();//gets the file path
    ObjectInputStream ois=null;
    FileInputStream fin=null;
    ProcedureSetup temp=null;
    try {
        fin = new FileInputStream(path);
        ois = new ObjectInputStream(fin);
        temp=(ProcedureSetup) ois.readObject();
        ois.close();
        fin.close();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    if(ois!=null){
        try {
            ois.close();
        } catch (IOException e) {}
    }
    if(fin!=null){
        try {
            fin.close();
        } catch (IOException e) {}
    }
    if(temp!=null){
        a=temp.a;
    }else{
        load();//If a load is failed, restart process.
    }
}

public void save(){
    String path=Operator.persistentGetDirectory();//get directory to save to
        String input =  JOptionPane.showInputDialog(this, "Enter the File name:");
        ObjectOutputStream oos=null;
        FileOutputStream fon=null;
        try {
            fon = new FileOutputStream(path+input+".obj");
            oos = new ObjectOutputStream(fon);
            try {
                oos.writeObject(this);
            } catch (CloneNotSupportedException e) {
                e.printStackTrace();
            }
            oos.close();
            fon.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
            if(oos!=null){
        try {
            oos.close();
        } catch (IOException e) {}
    }
    if(fon!=null){
        try {
            fon.close();
        } catch (IOException e) {}
    }

}

私の質問は次のとおりです。

これらのエラーが発生するのはなぜですか?

クラスパスに「tp」を含める必要があるのはなぜですか?

クラスパスに「tp」を必要とせずにオブジェクトを現在の状態で保存する方法が実際にある場合、どうすればそれを行うことができますか? (リンクは素敵でしょう)

4

3 に答える 3

0

これらのエラーが発生するのはなぜですか?

ここにはエラーが 1 つだけあります: java.lang.ClassNotFoundException: testprocedure.tp$3testprocedure/tp$3.classこれは、ピアにデプロイしていないことを意味します。

クラスパスに「tp」を含める必要があるのはなぜですか?

逆シリアル化が成功するように。.class ファイルがないクラスでは何もできません。ましてや、そのインスタンスを逆シリアル化することはできません。

于 2013-08-20T09:53:12.947 に答える