0

クラス 2 (GUI) のインスタンスを作成するクラス 1、GUI を実装するクラス 2、GUI を更新しようとするクラス 3 の 3 つのクラスがあります。

クラス 1 では、次のような GUI を作成します。

s = new ServerSocket(6067);         

//while(true){                              

    Socket ClientSocket = s.accept();   // Accept connections   

    // Create instance of the GUI (class 2) on a new thread     
    work w = cpd.new work();

    Thread t = new Thread(w);
    t.start();


    // Create instance of class 3 that uses the GUI on a new thread             
    Charger cpt = new ChargingPoint(ClientSocket, w.gui);   
    cpt.start();                                                
//}


class work implements Runnable{

    GUI gui;

    public void run(){

        try{

            gui = new GUI();
            gui.setVisible(true);                   
        }

        catch(Exception e){}

    }
}

クラス 2 では、GUI を実装し、次のような更新を可能にするメソッドがいくつかあります。

public void updateConsole(String text){
    Console.append(text + "\n");
}

クラス 3 では、以下のようにこれらのメソッドを使用しようとしましたが、次のようなステートメントに達するとコードがスタックします。

gui.updateConsole("Data: " + data);

これは、メインクラスとして GUI クラス (クラス 2)​​ を使用していたときに機能しました。このインスタンスを他のすべてのクラスに渡しました。これにより、問題なく GUI を更新できました。ただし、今回は別のクラス (クラス 1) から GUI を作成していますが、このメソッドが機能しなくなり、その理由を突き止めるのに苦労しています。

どんな提案でも大歓迎です。

4

1 に答える 1

0

これを自分でデバッグするためのツールを提供しようと思います。

Eclipse または同様のデバッガーを使用してみてください。 http://www.vogella.com/articles/EclipseDebugging/article.html

class2 が実際に gui クラスの正しいインスタンスにコールバックしていることを確認することから始めます。

デバッガーを使用すると、「オブジェクト ID」を見つけることができます。これにより、メモリ内のオブジェクトの一意の ID がわかります。通常はメモリ ポインタです。ChargingPoint の id が Work クラスで作成された id と一致することを確認します。間違ったクラスでメソッドを実行することは、コールバックで最もよくある間違いです。

次に、gui.updateConsole にブレーク ポイントを設定し、コードにステップ インします。

これにより、問題がすぐに明らかになります。

よろしく

于 2012-11-05T22:53:20.003 に答える