java 求救 (新问题,请见最下面新贴)

fido555fido

新手上路
注册
2003-02-06
消息
666
荣誉分数
0
声望点数
0
在一个class A里,有个class B的instance: objectB,objectB 起一个thread,在一个port等待信息(用ServerSocket)。程序中需要终止objectB,然后某个时刻再产生一个objectB。

现在的问题是,第二次创建的objectB无法在同一个port创建ServerSocket,错误如同该port仍被使用。

我在终止objectB的时候用的finalize(),我也试过用thread的destroy,都不行。

怎样做才能让objectB在终止的时候把原来的port也放弃,使得新的objectB还用原来的port?


谢谢。
 
关掉那个port先.
另外,对那个thread用join试试.
source code可以那来看看么?
 
Different from C++, Java object isn't garbage collected right after the object is null referenced. I see code that people call Runtime to force the collection, but it might be better idea to restruture the design.
 
谢谢两位指点,问题刚刚解决了。实际上就是要关掉那个port。只destroy那个thread不行。只是程序里直接关掉这个port不很容易,所以试来试去才弄好。谢谢你,bbj,程序是在别人的东西基础上作,很乱,没法简单放这里让让大家帮我看。这里高手还是挺多的。
 
新问题

一个class A 的 一个instance: objectA. 在objectA 被终止的时候要调用class A的finalize()对吗?我是在其关联的JFrame关闭的时候主动调用finalize()的:

public void windowClosed(WindowEvent e){
try{
objectA.finalize();
}catch(Throwable t){}
}

这样对不对?

在objectA 中要创建一个Thread: aThread,我想终止objectA的时候杀掉所有它创建的thread,可以这样吗?这是class A 的finalize():

protected void finalize() throws Throwable {
super.finalize();
if(aThread.isAlive()) aThread.destroy();
}

谢谢!
 
thread的经验不是太多,没试过这种强制终止thread会有什么负作用.查了一下reference,destroy并不clean up,所以会不会不安全.
如果那个thread不能自行退出的话,比如有一个无限循环,可以通过set一个flag中断循环,这样可以等待其自行退出.
 
后退
顶部