从另一个类访问Java Swing GUI

时间:2012-11-05 22:38:59

标签: java multithreading swing user-interface updates

我有三个类 - 类1创建类2(GUI)的实例,类2实现GUI,类3尝试更新GUI。

在第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,这个方法不再有效,我正在努力找出原因。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

我会尝试给你自己调试的工具。

尝试使用eclipse或类似的调试器。 http://www.vogella.com/articles/EclipseDebugging/article.html

首先检查class2实际上正在回调gui类的正确实例。

使用调试器,您可以找到“对象ID”。这将告诉您内存中对象的唯一ID。它通常是内存指针。检查ChargingPoint中的id是否与Work类中创建的id匹配。在错误的类上运行方法是回调最常见的错误。

然后转到你的gui.updateConsole中的断点并进入代码。

这应该很快就能揭示出这个问题。

问候