高分请教一个串口问题,如何判断一个串口已经被其它程序占用。
比如正在使用putty连接使用COM1,在JAVA程序中如何判断COM1已经被占用呢?

解决方案 »

  1.   

    接分,找找串口的API呗, 再不就JNI.
      

  2.   

    楼上兄弟,串口API能解决的话,我就不来这里麻烦大家啦。JNI也想过,也麻烦呀。
      

  3.   

    RS232嘛? 你为啥到Java版来问啊? 最好是到VC版.
      

  4.   


    try {
    sPort = (javax.comm.SerialPort) portId.open("SerialDemo", 5000);
    } catch (javax.comm.PortInUseException e) {
    log.error(this,e);
    return;

    }comm.jar你catch javax.comm.PortInUseException这个异常就可以了,红字部分换做处理的代码,比如什么串口XXX被占用一类。
      

  5.   

    楼上兄弟,谢谢你,一开始我就这样做的。我在catch块里,没做其它处理。
    我现在想着用JNI,用VC做个DLL,然后调用。
      

  6.   

    另外,用isCurrentlyOwned(),只能判断当前程序的一个实例占用了端口,比如我自己用java写的javaterminal,当一个javaterminal占用着COM1,运行另一个javaterminal,用isCurrentlyOwned()可以判断被占用,而且用getCurrentOwner()可以获得此占用了端口的程序名称。
    但是,如果被诸如putty之类的程序占用了端口,用isCurrentlyOwned()判断结果是未被占用,返回true,用getCurrentOwner()得到的结果是 Port currently not owned 。
      

  7.   

    [售后服务]
    to:hongming1129 我也有过这样的想法,不过想想之后就打消了。期待问题解决。关注~
      

  8.   

    楼主是不是想端口被占了就自动换一个?
    try - catch是最好的办法啦.做个递归.public void getPort(port)
    {
      try {
        sPort = (javax.comm.SerialPort) portId.open("SerialDemo", 5000);
    } catch (javax.comm.PortInUseException e) {
        getPort(new Random().nextInt(xxxx));
    }
    }
      

  9.   

    最终还是没用JNI,就是在try - catch的catch块中做相应的处理,然后return。谢谢pizzame和yzj520hyy,谢谢各位关注。
    就是还不知道怎么样获取占用端口的程序。