首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于J2ME 的网络设计 [已结贴,结贴人:bohemianren]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-29 10:45:12 楼主
    我现在的做法的是创建一个线程,然后wait();需要连接的时候notify();大致如下:

    public class HttpTask{

    public void getConnect(){
                httpConnection = (HttpConnection) Connector.open(URL);
                //……
                inputStream = httpConnection.openInputStream();
                //……
            } catch (Exception e) {
            //……
            } finally{
                //……
            }
    }
    public void cancel(){
            try{
            httpConnection.close();
                httpConnection = null;
                httpConnection.openDataInputStream();
            }catch(Exception e){
            //……
            }
           
    }

    }


    public class extends Thread{
    HttpTash ht = new HttpTask();
    public synchronized void run(){
    while(!isExit){
    wait();
    ht.getConnect();
    }
    }

    public synchronized void startHttp(){
    notify();
    }

    public void stopHttp(){
    ht.cancel();
    }
    }

    但是现在有一个问题,就是调用cancel()之后紧接着再次发起请求就会 hang住,
    原因应该是ht.getConnect();没有返回,也就是在调用cancel的时候没有立即结束HTTP连接,现在的产品需求是,在网络连接时按下取消会弹出“是否重新建立连接”的提示

    大家帮帮忙,我这样做结构有问题吗?如果有问题我改怎么去设计?如果没有问题,我改怎么样去取消一个网络连接,并让他立即返回呢
               
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zs_han
    • 等级:
    发表于:2008-04-29 10:51:031楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-29 11:22:012楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-29 11:47:013楼 得分:0
    楼主的cancel方法中,怎么会这样写呢?

    httpConnection.close();
    httpConnection = null;
    httpConnection.openDataInputStream();

    第三句会出错吧?难道不是一个空指针吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-29 13:52:384楼 得分:0
    引用 3 楼 cuilichen 的回复:
    楼主的cancel方法中,怎么会这样写呢?

    httpConnection.close(); 
    httpConnection = null; 
    httpConnection.openDataInputStream(); 

    第三句会出错吧?难道不是一个空指针吗?



    原来是这样写的:
        try{
            httpConnection.close();
            httpConnection = null;
        }catch(Exception e){
            //……
          }


    后来有个人和我说,加一个调用httpConnection函数的语句,目的就是让httpConnection抛出异常,效果会好些;
    结果我加了,没变化
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-29 16:36:525楼 得分:20
    楼主你何必要做这么麻烦,你都单独使用一个线程来做连接了,那么你要取消的时候就是把这个线程销毁,并且该线程连接返回的数据全部不处理就可以了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-30 19:11:096楼 得分:0
    该回复于2008-05-01 05:44:06被版主删除
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved