当前位置: 技术问答>java相关
帮忙:ServerSocket编程
来源: 互联网 发布时间:2015-07-27
本文导语: 我在jbuilder中编程时,碰到一个问题: class xx extends JPanel{//一个面板类,我在上面放了两个按钮,一个用于启动线 程yy,一个用于关闭线程 yy test; class yy extends ...
我在jbuilder中编程时,碰到一个问题:
class xx extends JPanel{//一个面板类,我在上面放了两个按钮,一个用于启动线
程yy,一个用于关闭线程
yy test;
class yy extends Thread
{
ServerSocket st;
public yy()
{
}
public void run()
{
st=new ServerSocket(12099);
while(true)
{.}//监听有无连接请求
st.close();
}
}
panel(面板)上按钮1产生的事件:
{
test=new yy();
test.start();
}
pane1(面板)上按钮2产生的事件:
{
test.stop();
}
}
问题在于我按下按钮1后,再按按钮2(停止线程test),再按按钮1(启动线程)
出现异常:java.net.BindException:Address in user.
我已经停止了线程test,先前的ServerSocket就应该关闭了,怎么还在呢?
class xx extends JPanel{//一个面板类,我在上面放了两个按钮,一个用于启动线
程yy,一个用于关闭线程
yy test;
class yy extends Thread
{
ServerSocket st;
public yy()
{
}
public void run()
{
st=new ServerSocket(12099);
while(true)
{.}//监听有无连接请求
st.close();
}
}
panel(面板)上按钮1产生的事件:
{
test=new yy();
test.start();
}
pane1(面板)上按钮2产生的事件:
{
test.stop();
}
}
问题在于我按下按钮1后,再按按钮2(停止线程test),再按按钮1(启动线程)
出现异常:java.net.BindException:Address in user.
我已经停止了线程test,先前的ServerSocket就应该关闭了,怎么还在呢?
|
线程不能这样停止的.这说明你的线程还没有停止.我不知道你想做什么,不过,你这样的做法是有点问题的,至少我觉得.如果是我做的话,我会这样做:
public class App {
public boolean finish;//不要这样用啊,这里只是为了简单.
public void startListen(){
//check finish;
while(!finish){
//set finish flag
wait for a request ;//阻塞调用
start a thread to handle the request of from client;
}
}
}
需要结束时,改变那个变量就行了.
public class App {
public boolean finish;//不要这样用啊,这里只是为了简单.
public void startListen(){
//check finish;
while(!finish){
//set finish flag
wait for a request ;//阻塞调用
start a thread to handle the request of from client;
}
}
}
需要结束时,改变那个变量就行了.
|
线程类中的destory ,stop方法是不推鉴使用的,最好使用wangfc(秋水) 的方法。