对于不熟悉flex的童鞋,要做一些像聊天等交互性功能,用applet + js也是很容易实现的——而且,跨浏览器,js也容易操作dom进行页面内容展示。

1. 建立一个工程,compiler level设置1.3

2. 找到jre lib 下的plugin.jar,导入路径

3. 写一个比较通用的socket client applet,暴露一些主要方法,比如jsFunCall connect close send,connect方法里开启一个domain thread负责接收处理数据(最好是以接口形式)

话说actionscript那种socket方法回调那是一个简单啊!java线程小麻烦了点。

package com.cisee.appletjs;   

import java.applet.Applet;   import java.io.IOException;   import java.io.InputStream;   import java.io.OutputStream;   import java.net.Socket;   import java.util.Random;   

import netscape.javascript.JSException;   import netscape.javascript.JSObject;   

public abstract class JsApplet extends Applet {   

    /** Socket */      private Socket sock = null;       /** Input Stream */      private InputStream is = null;       /** Output Stream */      private OutputStream os = null;   

    private final int port = 12800;       private final String host = "127.0.0.1";   

    /** win JSObject */      protected JSObject win = null;       /** doc JSObject */      protected JSObject doc = null;   

    /** Is connected? */      protected boolean connected = false;   

    Thread reviever;   

    String userid;       String toUserid;   

    protected String getInfo() {           return "Cisee Applet Javascript Interpretor Operation";       }   

    public void init() {           logMsg("Init..");           userid = System.currentTimeMillis() + "_" + new Random().nextInt(100);       }   

    public void destroy() {           closeConnect();       }   

    /**       * JS Object        */      protected JSObject getWin() {           if (win == null)               win = JSObject.getWindow(this);           return win;       }   

    protected JSObject getDoc() {           if (doc == null)               doc = (JSObject) getWin().getMember("document");           return doc;       }   

    public abstract void processMessage(final String msg);   

    /**       * Send message to server.       * @param msg message that will be sent.       */      void sendToServer(final String msg) {           if (connected) {               try {                   logMsg(msg);                   os.write((msg).getBytes());                   os.write("\r\n".getBytes());                   os.flush();               } catch (IOException e) {                   logMsg("Stream write error.", e);               }           } else {               wincall("warn_notconnected", null);           }       }   

    /**       * Close connection.       */      void closeConnect() {           if(reviever != null)               reviever.stop();   

        connected = false;           if (sock != null) {               try {                   sock.close();               } catch (IOException e) {                   e.printStackTrace();               }               sock = null;           }       }   

    /**       * Call function of outside explorer's script.       * @param function function name.       * @param param Parameter values.       */      protected void wincall(final String function, final Object[] param) {           Object[] realParam = param == null?new Object[0]:param;           try {               getWin().call(function, realParam);           } catch (JSException e) {               callAlert(                       "function : "                      + function                       + "(arg*"                      + realParam.length                       + ") is exist?");           }       }   

    /**       * Call alert function of outside explorer's script.       * @param msg Message.       */      protected void callAlert(final String msg) {           try {               getWin().call("alert", new String[] { msg });           } catch (JSException e1) {               e1.printStackTrace();           }       }   

    /**       * Log message when debug is true.       * @param msg Message.       */      protected void logMsg(final String msg) {           System.out.println(msg);       }   

    /**       * Log message when debug is true.       * @param msg Message.       * @param e Exception.       */      protected void logMsg(final String msg, final Throwable e) {           System.out.println(msg + "\r\nCause : " + e.getMessage());           e.printStackTrace();       }   

    /**       * Connect to server.       */      public void connect() {           if (connected) {               return;           }           logMsg("Connect to server...");    

        try {               // Conect to server..               sock = new Socket(host, port);               is = sock.getInputStream();               os = sock.getOutputStream();   

            connected = true;   

            // Thread that receive messages.               reviever = new Thread() {                   public void run() {                       try {                           while (sock != null && !sock.isClosed()) {                               if (is.available() != 0) {                                   byte[] buf = new byte[is.available()];                                    is.read(buf);    

                                String line = new String(buf).trim();                                   processMessage(line);                               }                           }                       } catch (IOException e) {                           logMsg("Error..", e);                       } finally {                           if (connected) {                               closeConnect();                               wincall("warn_connect_failed", null);                           }                       }                   }               };               reviever.setDaemon(true);               reviever.start();           } catch (IOException e) {               e.printStackTrace();           }       }   

    public void sendMsg(final String toId, final String msg) {           try {               // TODO               sendToServer(msg);           } catch (Exception e1) {               logMsg("Error in sendMsg", e1);           }       }   

    public void quit() {           try {               sendToServer("quit");               closeConnect();               wincall("applet_quit", null);           } catch (Exception e) {               logMsg("Error in quit", e);           }       }   

    public boolean isConnected() {           return connected;       }   

}  

Applet + Javascript 替代 comet 轮回 pull相关推荐

  1. java applet 淘汰_java – 替代applet的替代技术?

    我有一个(未签名的)小程序,可以让你绘制逻辑电路并在屏幕上测试它(有点像Electronics Workbench),然后它将电路序列化(内部形式,而不是可视化表示)并将其发送到服务器运行一系列自动化 ...

  2. 用Javascript修正12个常见的浏览器问题

    我们提倡尽可能使用CSS,而且我们常常能做到这一点.现代浏览器有很好的CSS支持-这无疑足够好让你使用CSS来控制布局和版面设计.但是有时候,某些网页元素在不同的浏览器会出现不同. 如果你不知道原因, ...

  3. ExtJs+php学习长连接comet技术开端。

    传统AJAX技术  JavaScript 调用 XMLHttpRequest 对象发出 HTTP 请求,JavaScript 响应处理函数根据服务器返回的信息对 HTML 页面的显示进行更新. 使用 ...

  4. java js隐藏_Javascript匿名函数是否仍然可见? (使用Java applet,这是一种隐藏JS代码的方法)...

    我正在使用Javascript编写应用程序.我正在寻找一种隐藏代码的方法,我想我已经找到了一个使用Java Applet的代码. 无论如何,我认为只有在评估js匿名函数的代码后仍然无法以任何方式访问它 ...

  5. 12种Javascript解决常见浏览器兼容问题的方法

    们提倡尽可能使用CSS,而且我们常常能做到这一点.现代浏览器有很好的CSS支持-这无疑足够好让你使用CSS来控制布局和版面设计.但是有时候,某些网页元素在不同的浏览器会出现不同. 如果你不知道原因,不 ...

  6. 为什么 Web 前端开发不抛弃 HTML 和 CSS,用纯 JavaScript 开发?

    从分析介绍来看,题主的主要工作内容是还是从事游戏方向的工作,前端里面的游戏开发大部分应用在canvas绘图里面,应用前端里面的html结构和css样式是比较低:那么咱们就需要从多角度考虑考虑为什么we ...

  7. matlab箱形图_使用javascript可视化世界幸福来构建箱形图

    matlab箱形图 Data visualization is an important and sometimes undervalued tool in a data scientist's to ...

  8. JavaScript解决常见浏览器兼容问题

    JavaScript解决常见浏览器兼容问题 我们提倡尽可能使用CSS,而且我们常常能做到这一点.现代浏览器有很好的CSS支持-这无疑足够好让你使用CSS来控制布局和版面设计.但是有时候,某些网页元素在 ...

  9. Browser Security-超文本标记语言(HTML)

    重要的4个规则: 1 &符号不应该出现在HTML的大部分节点中. 2 尖括号<>是不应该出现在标签内的,除非为引号引用. 3 在text节点里面,<左尖括号有很大的危害. 4 ...

最新文章

  1. Spring 和 Spring Boot 最核心的 3 大区别,详解!
  2. html源码md风格,code/html.md at master · Rongx/code · GitHub
  3. android rfid 读写sdk,Android-SDK-1.0.0-STD android手机调用RFID模块读取电子标签Demo - 下载 - 搜珍网...
  4. setCharacterEncoding 是在request.getParameter获取参数之前 设置request的编码格式 一步到位...
  5. Transformer-XL语言模型:超长上下文依赖
  6. Android音频开发(七)音频编解码之MediaCodec编解码AAC下
  7. 轻松解决远程链接的“Gtk-WARNING **: cannot open display;”或“Cannot connect to display;”问题
  8. Butterworth数字滤波器设计
  9. 可解释的人工智能 = 三维结构芯片 + 仿突触运动
  10. 人工智能对我们的影响(随便谈谈)
  11. 百度地图LBS应用开发代码
  12. SAP那些事-职业篇-10-顾问最重要的思维方式
  13. 基于JSP的网上书城
  14. 如何优雅的面对一坨翔~~感悟编程代码
  15. ERP与CRM、MRP、PLM、APS、MES、WMS、SRM的关系
  16. eclipse luna java 版本_eclipse luna使用jdk1.8初始化
  17. 教你解决浏览器被360劫持篡改主页的麻烦
  18. c++动态库调试中的脑壳疼
  19. 计算机教师培训内容,计算机教师培训内容.doc
  20. 机器学习中常见性能度量汇总

热门文章

  1. 时间戳、中国标准时间、年月日三种时间格式转换
  2. 数据库事务的ACID及隔离级别
  3. 网页中a标签属性统一设置新窗口打开
  4. 微信小程序开发【从0到1~入门篇】
  5. 从傅立叶级数到傅立叶变换
  6. java实现fifo算法_java算法:FIFO队列
  7. NSQ简介及连接模式
  8. 实战CenterNet,训练猫脸关键点检测数据集并测试
  9. supermap for android移动端离线地图显示及添加自定义坐标点和自定义点符号
  10. java实现快速读取文件内容