简体   繁体   中英

Exported JAR file doesn't detect serial ports

What this code snippet is supposed to do: Detect all serial ports and print the names of the ports to the screen.

The Problem: When run in eclipse, the program detects serial ports fine; however, after exporting a runnable jar and running the jar, the jar detects NO ports. I highly doubt this has anything to do with the actual code itself (since it runs just fine in eclipse) but I've put the snippet in just in case I missed something.

What I've tried/already done/looked at:

I've considered that it might just be my computer, so I already tried running the jar on a different computer, but received the same results. I also made sure that everything is in the right place (the jar file, .dll file, and properties file). I quadruple checked to make sure that my build path included the right files.

I've already explored: http://www.oracle.com/technetwork/java/index-139971.html

I've spent the last hour searching for sites and SO questions about a problem similar to mine, but I've found no solutions.

This is the site which I based my code off of: http://en.wikibooks.org/wiki/Serial_Programming/Serial_Java#JavaComm_API

The Question: Why is this happening/How do I fix this?

Additional information: I'm using javax.comm , with a 32 bit version of jdk 1.8.0_31, running windows 8. The jar file runs just fine (there's a separate component to it that works perfectly). No errors during compilation (or warnings), and no exceptions are being thrown. I'm running the jar using java -jar program.jar . I know my computer has a serial port because eclipse shows COM1 when i run the program. (The program is also able to detect the parallel ports, but only in eclipse)

    boolean portsDetected = false;
    Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers();
    while (portIdentifiers.hasMoreElements()) {
            CommPortIdentifier pid = (CommPortIdentifier)portIdentifiers.nextElement();
        if ((pid.getPortType() == CommPortIdentifier.PORT_SERIAL)) {    
            System.out.println(pid.getName());
            portsDetected = true;
        }
    }
    if (!portsDetected) {
        System.out.println("No serial ports detected");
        return 0;
    }

If there is anything else you need to know or would like to see, ask and ye shall receive!

1. Copy win32.dll file to c:\ProgramFiles\java\jdk\bin
2. Copy comm.jar file to c:\ProgramFiles\java\jdk\lib
3. Copy javax.comm properties file to c:\ProgramFiles\java\jdk\lib
4. Copy 
win32com.dll  to jre/bin

comm.jar to  jre/lib/ext

java.comm.properties to jre/lib



 Note:Add all files in step 4 to both JRE.  Jre Dir and Jre in JDK folder

This solved my problem

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM