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

急,在线等待,有关多线程applet的问题

    来源: 互联网  发布时间:2015-11-04

    本文导语:  我编写一个applet,单开一个线程,在其中创建socket连接,进行udp通讯,一直循环receive并处理,但在网页中刷新后,再接收信息时,就把整个浏览器关掉了!!!!        是不是刷新前的线程未及时终止惹的?     ...

我编写一个applet,单开一个线程,在其中创建socket连接,进行udp通讯,一直循环receive并处理,但在网页中刷新后,再接收信息时,就把整个浏览器关掉了!!!!  
     是不是刷新前的线程未及时终止惹的?  
     我把主要代码,贴在此:

// execute...
public class config extends JApplet implements Runnable
{
   private final int BUFSIZE=512;
   private String message="Status Request";
   private InetAddress hostAddress;
   private DatagramSocket socket;
   private Thread t=null;
   private boolean stopThread=false;
   private final int INPORT=8388;
   private final String hostname="192.168.201.104";
   private myPanel SRPanel;

   public void init()
   {
       initialPanel();
       t=new Thread(this);
       //window.eval("alert('new Thread(this)');");
       t.start();
       //stopThread=false;
   }

   public void destroy()
   {
      stopThread=true;
      //t.setPriority(Thread.MIN_PRIORITY);
      t.interrupt();
      //window.eval("alert('destroy() end');");
      //t.stop();
      //System.out.println("Set stopThread OK! t.isInterrupt:"+t.isInterrupted());
      t=null;
      //System.out.println("stopThread=="+stopThread);
      System.out.println("Set stopThread OK!");
   }
   public void run()
   {
      //window.eval("alert('run()');");
        try{
             byte[]  outBuffer = new byte[BUFSIZE];
             byte[]  inBuffer=new byte[BUFSIZE];
             socket=new DatagramSocket();
             try
             {
                hostAddress=InetAddress.getByName(hostname);
             }catch (UnknownHostException e){}

             outBuffer=message.getBytes();
             DatagramPacket sdpacket=new DatagramPacket(outBuffer,outBuffer.length,hostAddress,INPORT);
             DatagramPacket rdpacket=new DatagramPacket(inBuffer,BUFSIZE);
             try
             {
                  socket.send(sdpacket);
                  System.out.println("Send  request: "+message);
             }catch(java.io.IOException e)
             {//window.eval("alert('IOException');");
             }
             // window.eval("alert('end initial');");
             while((!t.isInterrupted())&&(stopThread==false))
             {
                 try
                 {
                    socket.receive(rdpacket);
                    t.sleep(2);
                    if(t.isInterrupted())
                    {/**/System.out.println("if(t.isInterrupted())"+t.isInterrupted());
                        return;
                     }
                      /**/System.out.println("else(t.isInterrupted())"+t.isInterrupted());
                    message=new String(rdpacket.getData(),0,rdpacket.getLength());
                    if((message.length()==12)&&(stopThread==false))
                    {
                       System.out.println("Receive status_changed infor: "+message);
                       setStatus(message);
                    }
                    else if ((message.equals("verify"))&&(stopThread==false))
                    {
                     System.out.println("Receive address_check infor: "+message);
                     message="verifyok";
                     outBuffer=message.getBytes();
                     sdpacket=new DatagramPacket(outBuffer,outBuffer.length,hostAddress,INPORT);
                     socket.send(sdpacket);
                    }

                    else if((message.length()>16)&&(stopThread==false))
                    {
                       String msg=message.substring(0,16);
                       if(msg.equalsIgnoreCase("A:6:0,1&B:6:0,0&"))
                       {
                           System.out.println("Receive initial infor: "+message);
                            initialStatus(message);
                       }
                    }
                    else if(stopThread==false)
                            System.out.println("Receive invalid infor: "+message);
                 }
                 catch(java.io.IOException e){System.out.println("Receive or send  infor error!");}
              }//while()
           socket.close();
           }
           catch (Exception e)
       {
              //window.eval("alert('can not create socket!');");
            }
   }//run()


   private synchronized void initialPanel()
   {
     ......
      notifyAll();
   }
   private synchronized void initialStatus(String str)
   {
      ......
       notifyAll();
   }

}//class end
 

|
线程的新建和启动好像不应该写在init()中吧
   t=new Thread(this);
   t.start();

标准的applet的范例如下:
 //Called by the browser or applet viewer to inform this applet that it has been loaded into the system.
    public void init() {
    }

    //Called by the browser or applet viewer to inform this applet that it should start its execution.
    public void start(){
      loopMainStart();
    }

    //Called by the browser or applet viewer to inform this applet that it should stop its execution.
    public void stop()
    {
      loopMainStop();
    }

    private void loopMainStart()
    {
      if(loopMainThread == null) {
        loopMainThread = new Thread(this);
        loopMainThread.start();
      }
    }

    private void loopMainStop()
    {
      if(loopMainThread != null){
        //loopMainThread.stop();  //Deprecated. This method is inherently unsafe.
        loopMainThread = null;
      }
    }





|
You Applet
start(){
 ...//启动线程
}

stop(){
 ...//停止线程(不是调用Thread.stop())
}

    
 
 

您可能感兴趣的文章:

  • linux下,如何在多线程中每个线程设置一个定时器,在线等,急。。。谢谢
  • 关于多线程的问题,在线等。。。
  • GDB如何调试子线程,急,在线等!
  • linux下多线程开发遇到的调度问题!!!急~~~~~在线等!
  • 关于用管道流进行线程间通信的问题,在线急等!!(尽早结账!欢迎一招命中)
  • 在线等待,甚急,马上给分,一个获得线程ID的问题
  • 网络技术 iis7站长之家
  • 请教: 两个线程对一个缓冲区写入与读出 ........在线等.....
  • 在线等待:用子线程与ORACLE数据库建立连接的问题。
  • (在线等)关于主程序和线程的执行顺序。。。大家帮我看看
  • SCO UNIX 5.05下的线程软件包可以从哪里获得?(在线等待)
  • 在线等 linux查看java线程数
  • 帮忙怎样写有关 unix下的线程的问题(在线等待,急用,谢谢)
  • 请问如何暂停一个线程,又如何继续运行?(在线等)
  • 如何增加linux的最大线程数?在线等ing
  • 哪位大虾示范一下怎么用两个线程(在线等候)
  • 关于线程的问题(在线给分)
  • 请问我在jsp中启动的线程是不是随着页面的生成就自动结束了?(在线等着)
  • 两个线程,一音/一视频udp数据包,优先级问题,在线等!
  • 【在线等】在编写多线程遇到了问题,哥们,帮个忙,急得不行了
  • 简单的输入输出问题 在线等待 在线给分
  • 怎么用能让asp实现统计在线人数的功能。在线等待!!!帮忙送分!
  • 100分,等待,在线等待:防火墙问题?
  • 60分,求知JBuilder的CD-KEY! 在线等待
  • 新手上路,请多关照!如何查看启动日志????在线等待!!
  • 急救:关于BLOB数据类型---在线等待,高分相送!
  • 在线等待,gcc的网址是什么??
  • 哪儿有bes5下载,在线等待。下载成功再送299分!!!
  • 求UNIXWARE7.11的原版下载,高分相赠,在线等待!!!
  • 请问哪里有dm5sum可以下载?在线等待!!
  • 如何调用其他程序,比如说"notepad.exe",在线等待,急!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 有关日期,简单的问题!在线等!
  • 有关在线用户的显示
  • 有关liunx启动的问题?在线等待!!!
  • 有关ODBC与JDBC的问题,在线等待
  • 菜鸟在线提问:有关弹出式菜单!
  • 有关页面显示applet的问题` 在线等待
  • 在线等待,有关页面提交的问题
  • 有关java出错的问题,在线等候
  • 有关JTABLE的问题!急!在线等待!
  • 有关linux下读写串口的问题,在线等待!
  • 急!!!有关Apache在Linux上的安装、启动问题!(在线等待!)
  • 有关TOMCAT中类库的存放路径,问题很菜,请不吝指点?在线等待。
  • 100分求教有关sco服务器的连接问题(在线等)
  • 一个非常easy的有关gcc的question........(在线等……马上结贴)
  • 一个可能是有关CLASSPATH的问题,请各位帮忙(在线等待)
  • 有关JBuilder6.0的问题(有请高手帮忙),在线等待,高分相送,谢谢
  • 急!!有关Telnet的问题 (在线等待中)
  • 在线求救!有关Jakarta-Tomcat-connectors的安装
  • **********菜鸟送分了,有关中文字符的问题,大家在线接分了!!
  • ■■有关RH Linux的在线更新(OnLine Update)?Linux下有没有如Windows下的Windows Update一样的工具呀,可下载补丁和Update组件?
  • 基于Html5的mockups在线工具简介
  • 装MYSQL后启动错误! mysqld ended --在线急等!在线急等!在线急等!在线急等!-----
  • MyEclipse SVN插件SubEclipse 在线离线等几种安装方式介绍
  • 智能在线表单设计器 FreeForm智能在线表单设计器
  • Linux使用群24032501,保持20人在线,目标50人在线
  • 在线求教, 为什么不能开始除root之外的用户登录??...很急, 在线等
  • 在线等,在线给分!(简单问题,急)
  • 我需要唯一用户在线,不能两个用户同时在线的JSP实现的设计文档
  • 在线等,在线给分!!!!!!!!!!
  • 在线求助!关于如何使用“信号”的方式来响应键盘按下的消息!在线急盼回复!
  • 如何判断在线用户,主要是如何判断用户关闭所有窗口(即他已经不在线了)?


  • 站内导航:


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

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

    浙ICP备11055608号-3