我有一个带有按钮的Swing窗体,点击该窗体时会开始SocketServer
,用于侦听单独线程中的传入请求。以下是我拥有的课程结构。不使用stop()方法结束线程执行
MainForm
:这是我的主要类,它启动Swing窗体。它有两个按钮,“启动服务器”和“停止按钮”。MySocketServer
此类别为SocketServer
对象存在,它具有方法startServer()
和stopServer()
。
以下是开始按钮的Click Event Body。
t = new Thread(new Runnable() //Object t is created globally in this main class.
{
public void run()
{
myss = new MySocketServer(); //Object myss has similar accessibility as t.
myss.startServer();
}
});
t.start();
和之后是停止按钮的Click事件车身
myss.stopServer();
if(t.isAlive());
System.out.println("Thread is still alive!!");
虽然我可以切换SockeServer“开始”和“停止”作为我的时候,我想,但我知道,每次我开始服务器,新线程被创建,并且即使使用MySocketServer
的方法停止服务器,它仍然保持活动状态。
我可以使用的Thread
stop()
和停止线程执行,但因为它是贬值,我研究过,一旦他们的run()
方法已经完全执行的线程都结束了,但我已经startServer()
法分离,以便它可以单独处理连接的客户端。
请注意startServer()
有While-Listen循环,所以基本上run()
线程的方法处于无限的执行状态,直到我明确地调用stopServer()
并暂停循环。
这里可以做些什么?
我这是在'serverStart使用()'方法,它是在每次循环检查布尔标志,和我在'startserver的设置该标志为假()',而现在调试我才知道,虽然循环结束时调用'stopServer()',甚至'的run()'线程的方法典雅执行完毕,但为什么我收到'的IsAlive()'真的,即使运行完成? – Kushal