Java Windows连接到网络时收到通知

Java Windows连接到网络时收到通知,java,windows,networking,notifications,java-native-interface,Java,Windows,Networking,Notifications,Java Native Interface,在Java程序(使用JNI)中,当新连接可用时,windows操作系统是否有任何方式通知您? 目前,我必须检查这一点的唯一方法是轮询一个试图下载网页的函数。如果下载成功并且没有抛出异常,那么我可以猜测是互联网连接 但是,更好的解决方案可能是: 在程序启动时,检查Internet连接 如果没有可用的internet连接,请“注册”windows网络通知并等待() 用户连接到Internet,Windows操作系统通知Java机器=>线程被唤醒 做点什么 以下操作可以执行ping操作,比下载页面的成

在Java程序(使用JNI)中,当新连接可用时,windows操作系统是否有任何方式通知您? 目前,我必须检查这一点的唯一方法是轮询一个试图下载网页的函数。如果下载成功并且没有抛出异常,那么我可以猜测是互联网连接

但是,更好的解决方案可能是:

  • 在程序启动时,检查Internet连接
  • 如果没有可用的internet连接,请“注册”windows网络通知并等待()
  • 用户连接到Internet,Windows操作系统通知Java机器=>线程被唤醒
  • 做点什么

  • 以下操作可以执行ping操作,比下载页面的成本更低,并且您可以更改超时时间:

    InetAddress.getByName( "stackoverflow.com" ).isReachable( 4000 )
    
    以低优先级放入线程循环:

    while( ! InetAddress.getByName( "stackoverflow.com" ).isReachable( 4000 )) {
       Thread.slepp( 1000L );
    }
    
    我没有更好的了

    InetAddress.isReachable
    文档:

    测试该地址是否可访问。尽最大努力是由 实现尝试到达主机,但防火墙和服务器 配置可能会阻止导致无法访问状态的请求 而某些特定端口可能是可访问的。典型的实现 如果可以获得特权,将使用ICMP回显请求, 否则,它将尝试在端口7(Echo)上建立TCP连接 目标主机的名称


    似乎与Java有关,但这不是Java。该消息似乎也可能会让系统通知您。是的,但是如何收听windows消息?我打赌有一些JNI库可以做到这一点……有时防火墙被配置为阻止ICMP消息。
    isReachable()
    :@ShashankKadne该方法仅在Unix/Linux上以root权限运行的例外情况下使用ICMP,而这种权限永远不会实际应用。