当前位置:  技术问答>java相关

一个老问题,但我始终没有彻底解决。还请大侠帮帮我,先谢过了。[分不够可以再加]

    来源: 互联网  发布时间:2015-02-10

    本文导语:  其实这个问题以前已经有请教过了,后来几经折腾,有了一点改进,但问题还是没有彻底解决。特再来请教。 我的要求是点击按钮即可实现服务器端口的打开或关闭。目前程序每第一次按下打开按钮,端口可以打开...

其实这个问题以前已经有请教过了,后来几经折腾,有了一点改进,但问题还是没有彻底解决。特再来请教。
我的要求是点击按钮即可实现服务器端口的打开或关闭。目前程序每第一次按下打开按钮,端口可以打开,再按下关闭按钮,端口也可以关闭,但仅限于第一次操作。此后打开关闭按钮便不再起作用,我想可能是线程未结束的原因造成的,可就算我使用不被推荐的stop方法,依然如此。请专家指明根源,谢谢了。
源码在此:

import java.io.*;
import java.net.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Clk_Server
{    public static void main(String[] args)
    {    
        JFrame frame=new ServerFrame();
        frame.show();
    }
}

class ServerFrame extends JFrame implements ActionListener
{    public ServerFrame()
    {    JPanel p=new JPanel();
        startButton =new JButton("打开");
        p.add(startButton);
        startButton.addActionListener(this);
        getContentPane().add(p,"South");
        textArea=new JTextArea(8,40);
        scrollPane=new JScrollPane(textArea);
        getContentPane().add(scrollPane,"Center");
        
        setTitle("服务器");
        setSize(500,300);
        
        ServerOpen=new ServerHandler();
        
        addWindowListener(new WindowAdapter()
            {    public void windowClosing(WindowEvent e)
                {    System.exit(0);
                }
            });
    }
    public void actionPerformed(ActionEvent evt)
    {    
        Object source=evt.getSource();
        if (source==startButton)
        {    
            if (startButton.getText()!="打开")
            {
                startButton.setText("打开");
                ServerOpen.shutoff();
            }
            else
            {    
                startButton.setText("关闭");
                ServerOpen.start();
            }
        }
    }

    private JButton startButton;
    private JScrollPane scrollPane;
    private JTextArea textArea;
    private ClkServer server;
    private ServerHandler ServerOpen;
    private Thread newHandlerThread;
}

class ServerHandler extends Thread 
//implements Runnable 
{
    private static final int SERVER_PORT=8189;
    private static final int MAX_CLIENTS=100;
    private boolean keepRunning=false;
    private ServerSocket listenSocket=null;
    
      public void run() 
    {    Socket clientSocket = null;
        try
        {    
            listenSocket=new ServerSocket(SERVER_PORT,MAX_CLIENTS);
            while (true)
            {    try
                {    
                    sleep(5);
                }
                catch(InterruptedException e)
                {    System.err.println("Sleep InterruptedException : "+e);
                }
                // Accept a new client.
                  clientSocket = listenSocket.accept();
                //System.out.println("link link link ...");
               
                // Create a new handler.
                //StockQuoteHandler newHandler = new StockQuoteHandler(clientSocket,stockInfo,stockInfoTime);
                //Thread newHandlerThread = new Thread(newHandler);
                //newHandlerThread.start();
            }
        }
        catch(IOException excpt)
        {    System.err.println("Unable to listen on port "+SERVER_PORT+" : "+excpt);
            shutoff();
            return;
        }
      }
        
    protected void status(boolean Status) 
    {
        keepRunning = Status;
    }
    public void shutoff() 
    {    try
        {    //System.out.println("Socket Closed _shutoff.");
            listenSocket.close();
        }
        catch(IOException excpt) 
        {
            System.err.println("Failed I/O: "+ excpt);
          }
    }

|
你程序的问题是,线程是不可以重入的。所以你在线程退出后在start是不行的。
所以这样就行了。
class ServerFrame extends JFrame implements ActionListener
{    public ServerFrame()
    {    JPanel p=new JPanel();
        startButton =new JButton("´ò¿ª");
        p.add(startButton);
        startButton.addActionListener(this);
        getContentPane().add(p,"South");
        textArea=new JTextArea(8,40);
        scrollPane=new JScrollPane(textArea);
        getContentPane().add(scrollPane,"Center");
        
        setTitle("·þÎñÆ÷");
        setSize(500,300);
        
        
        
        addWindowListener(new WindowAdapter()
            {    public void windowClosing(WindowEvent e)
                {    System.exit(0);
                }
            });
    }
    public void actionPerformed(ActionEvent evt)
    {    
        Object source=evt.getSource();
        if (source==startButton)
        {    
            if (startButton.getText()!="´ò¿ª")
            {
                startButton.setText("´ò¿ª");
                ServerOpen.shutoff();
            }
            else
            {    
                startButton.setText("¹Ø±Õ");
                ServerOpen=new ServerHandler();
                ServerOpen.start();
            }
        }
    }

    private JButton startButton;
    private JScrollPane scrollPane;
    private JTextArea textArea;
    private ServerHandler ServerOpen;
    private Thread newHandlerThread;
}

    
 
 

您可能感兴趣的文章:

  • hotenM(CMP)大侠等EJB大侠进来!小问题请教!
  • 启动portmap时有问题,各位大侠帮忙分析下哪里出了问题
  • 大侠们,安装问题
  • qt大侠帮忙啊,mousemove消息接收问题
  • 初级问题,请大侠指教
  • 关于session方面的问题!哪位大侠帮帮忙!?
  • 各位大侠,还有一问题请教,如下:
  • 编程语言 iis7站长之家
  • 如何实现一个图片下拉列表的问题,请各位大侠不吝赐教,谢谢!!!
  • # # # # # # 新手装RedHat9.0遇到问题,请大侠指点 # # # # # #
  • 大侠救救我,jb7安装问题
  • 服务器超时处理的问题,请大侠指点
  • 向各位大侠问一个关于freebsd中mbuf的问题?
  • cron定时问题,请大侠帮忙。
  • 两机提供Web服务的问题,请大侠指教,急!(三根鸡毛)
  • 各位大侠,小弟有问题,请赐教!
  • linux学习的资料问题,请大侠推荐
  • ld 出错问题,谢谢各位大侠
  • JSP+数据库文本存取中的换行问题,请教大侠
  • 我想问一个循环问题:多谢诸位大侠!!
  • 【有谁能帮帮我】...Liunx上网的乱码问题,查了很多资料还是没有解决,帮帮我呀,好郁闷。
  • 该死的中文显示问题,帮帮忙
  • 关于安装ISDN的问题,大侠们帮帮我啊
  • QTextBrowser的拖影问题,各位大虾,帮帮忙
  • 新手求教:关于ftp命令的问题,请大家帮帮忙
  • 请各位帮帮我,一个简单问题
  • jb中配置mysql的问题??急啊,帮帮我啊!
  • 关于聊天室的问题,请大家帮帮忙,一定给分
  • 挺难的问题,哥哥姐姐帮帮我吧,我很着急
  • 菜鸟问题,着急呀,大家帮帮忙呀!!
  • U盘的LINUX系统问题,大虾们帮帮忙。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 新手问题给十分不知够不够,不够再给。
  • 一个基本问题,但需要高手指点。。水平不够者勿误导
  • 紧急求救 我用freebsd通过smbfs连接win2000的一些问题 (分不够可加)
  • 关于crontab问题(若分不够,可加)
  • 硬盘空间不够的问题
  • JB5安装问题,分不够可以在加!
  • 关于截分文件的问题?分不够可再加
  • 关于red hat 8.0的问题,不够再给,(在线等)
  • 关于写文件报磁盘空间不够的错的问题
  • 刷新率问题!分不够可以再加!在线等待!!
  • 急!急!100分问题求解(不够可加)输入中文到oracle数据库乱码的问题
  • 使用shell在文本文件中进行字符串搜索问题?shell高手请进,分不够可以再加
  • 硬盘空间不够的问题!
  • gtk+GUI问题,100分!!!不够再开贴给分!!!在线等!!!!!!!跟贴就有分!!!!!
  • 字符集的问题,请大家帮忙了!分不够再加
  • 各位高手请指点:cvs的安装问题!!!在线等待,分不够可再加!!
  • 请教这里的高手一个巨麻烦的问题,分不够另加。
  • JRE1.3.1的字体问题,分不够可再加。
  • 高分请教输入法的问题,分不够可以再给.
  • c 语言和shell 混合编程问题?(分不够可以另加)
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 简单问题简单问题简单问题简单问题
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 小问题,急问题,重大问题!!!
  • sharepoint 2010中item.Update()和item.SystemUpdate 修改数据版本问题解决
  • 弱弱的一问,linux下的中文问题及网络问题,分不是问题
  • 八个问题帮你快速了解Docker
  • 请教两个小问题:一个cgywin下使用vi的问题,另一个socket的问题
  • 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
  • 网页的编码问题!或者java的编码问题,由此引出一条解决中文问题的思路
  • nginx Windows版相关问题及使用说明


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3