不知道有没有人哈,大多数这个时候我都睡咯。。我有个检查网络连接状态的方法,姑且叫他check() 吧。这个check() 在正常情况下能放回一个值给我,如果网络突然断了,这个方法会阻塞一会。这样给人的感受就不好了,我想规定一个时间如500ms,如果超过这个时间,check()方法就返回一个错误信息给我。这个check()方法是人家要调用的。不知可有高人呀。

解决方案 »

  1.   


    java.util.concurrent.Future
    java.util.concurrent.FutureTask
    javax.swing.SwingWorker
      

  2.   

    中有 T  get(long timeout, TimeUnit unit)  方法。
      

  3.   

    javax.swing.SwingWorker 这个应该没什么用,我不做界面。因为这个方法是给人家调用的。我等很久那么人家也会等很久。java.util.concurrent.Future
    java.util.concurrent.FutureTask
    这两个东西是并非使用的,这个应该没有还没达到那种高度吧
      

  4.   

    如果你在java里面可以用定时器java.util.Timer,然后timer.schedule,你的执行调度的类需要继承TimerTask(java.util.TimerTask)
    具体例子网上多的是,你可以查一下,就不多废话了
      

  5.   

    不知道那个 check 是怎么实现的,如果用的是 socket 的话,那其本身就自带有连接超时检查的
      

  6.   

    本身是不带的,这个check()方法是调用Linux的Shell文件,由Shell返回结果的。
      

  7.   

    linux里面的shell有定时的,你可以用里面的命令crontab  -e 
    然后每隔一段时间就执行你的程序
      

  8.   

    就是掉用的Linux中的命令被阻塞了呀!比如你在linux下输入一个命令,而这个命令会等很久才会有结果,我的方法是根据他的结果做出相应的操作,他阻塞了,那么调用的方法也就阻塞了。
      

  9.   

    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
    while (interfaces.hasMoreElements()) {
      NetworkInterface interf = interfaces.nextElement();
      if (interf.isUp() && !interf.isLoopback())
        return true;
    }
      

  10.   

    Check()方法,你可以写个定时器调用~
      

  11.   

    check方法是自己写的吗?可以试试
    如果是自己写的,可以在check方法里启动一个线程去掉用shell,同时用一个线程监控调用shell线程的状态和时间,如果调用shell的线程结束,则返回状态,如果超时,则启动一个shell去kill之前的shell
      

  12.   

    这个方法还比较好,不过kill之前的Shell又称问题了,而且,这个线程杀掉之后得放回一个值给我才行,用线程很不好返回一个值!
      

  13.   

    再开个线程 check  被别人调用的方法 开个线程check 超时直接返回了也就是说你的方法是秒内返回的 至于出不出来结果 由另一个线程决定