0

我有三个类 - 创建类 2(GUI)的实例的类 1、实现 GUI 的类 2 和尝试更新 GUI 的类 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 回答