2006-08-14

方法的困惑,问题的核心

问题的关键应该是"Swing中使用线程控制界面操作的方法",而不是类和类的关系。
当然,维持程序正常的继承关系除外。

我们尝试一下这样修改代码:

main.java保持不变,将sniffer.java改写为如下

package ImageSniffer;

public class sniffer extends main implements Runnable
{
main mainClass = new main();

Thread snifferThread = new Thread(this);

public void star()
{
snifferThread.start();
}

public void newTest()
{
mainClass.setStusText("New Test......");
}

public void run()
{
newTest();
}
}

这样,当按下"开始"按钮的时候,执行main这个类中的starSniffer()方法,starSniffer()的代码是
public void starSniffer()
{
sniffer theSniffer = new sniffer();
theSniffer.star();
}
这里出现了第一个问题:
这样控制snifferThread启动是否是正确的方法?

通过调试发现,snifferThread确实启动了,并且执行了sniffer类中的newTest()方法
public void newTest()
{
mainClass.setStusText("New Test......");
}

但是程序在这里就停住了,并且在main类的
public void setStusText(String stusText)
{
stusTextLabel.setText(stusText);
}
方法中stusTextLabel.setText(stusText)发现了NullPointerException异常
线程 [Thread-2](已暂挂(异常 NullPointerException))
-->main.setStusText(String) 行: 195
sniffer.newTest() 行: 16
sniffer.run() 行: 21
Thread.run() 行: 595

这就出现了第二个问题:
sniffer类的newTest()方法应该如何重载main类的setStusText(String stusText)方法?

还有一个问题,要在sniffer类中实现对main类中setStusText(String
stusText)方法的覆盖,sniffer类和main类应该是怎样的关系;声明sniffer extends main是否正确?

相关连接:方法的困惑,如何重载怎么覆盖

No comments: