Solved

CommPortIdentifier doesn't find any ports

Posted on 2004-03-24
3
821 Views
Last Modified: 2007-12-19
Unfortunately, CommPortIdentifier doesn't find the ports. I had copied win32com.dll into every bin directory, and comm.jar + javax.comm.properties  into every lib directory, but it didn't help. The device manager shows that I have all the ports, and HyperTermonal works properly too.

Here's the code, which I use to find the ports.
   private Enumeration m_portList;

    public CTesaComm() {
        initComponents();
       
        // initialize the CommPortIdentifier
        System.out.println("looking for ports...");
        CommPortIdentifier portId;
        m_portList = CommPortIdentifier.getPortIdentifiers();
        System.out.println(m_portList.toString());
        while (m_portList.hasMoreElements()){
            portId = (CommPortIdentifier)m_portList.nextElement();
            System.out.println(portId.getName());
        }
   
    }


I also tried forcing the connection on COM1, COM2 and COM3 with the following code (where _X is the number of the port)

        try
        {
            portID = CommPortIdentifier.getPortIdentifier("COM2");
        } catch (NoSuchPortException e) {
            System.err.println("Nosuch port");
            return;
        }

I'm getting the NoSuchPortException .

Please suggest.

Thanks,
Nick
0
Comment
Question by:kender_a
3 Comments
 
LVL 16

Expert Comment

by:krakatoa
ID: 10665397
This is Sun's own port tester code:

/*
 * @(#)BlackBox.java      1.13 98/10/20 SMI
 *
 * Author: Tom Corson
 *
 * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Sun grants you ("Licensee") a non-exclusive, royalty free, license
 * to use, modify and redistribute this software in source and binary
 * code form, provided that i) this copyright notice and license appear
 * on all copies of the software; and ii) Licensee does not utilize the
 * software in a manner which is disparaging to Sun.
 *
 * This software is provided "AS IS," without a warranty of any kind.
 * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
 * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
 * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
 * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE
 * SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS
 * BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES,
 * HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING
 * OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 *
 * This software is not designed or intended for use in on-line control
 * of aircraft, air traffic, aircraft navigation or aircraft
 * communications; or in the design, construction, operation or
 * maintenance of any nuclear facility. Licensee represents and
 * warrants that it will not use or redistribute the Software for such
 * purposes.
 */

import java.io.*;

import java.awt.Frame;
import java.awt.FlowLayout;
import java.awt.Color;
import java.awt.Insets;
import java.awt.Dimension;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;

import java.util.Enumeration;

import javax.comm.CommPort;
import javax.comm.CommPortIdentifier;
import javax.comm.SerialPort;
import javax.comm.NoSuchPortException;
import javax.comm.PortInUseException;

public class BlackBox extends Frame implements WindowListener
{
      static int                  portNum = 0,
                              panelNum = 0,
                              rcvDelay = 0;
      static SerialPortDisplay[]      portDisp;
      static BlackBox             win;
      static boolean                  threaded = true,
                              silentReceive = false,
                              modemMode = false,
                              friendly = false;

      public BlackBox()
      {
            super("Serial Port Black Box Tester");
            addNotify();

            addWindowListener(this);
      }

      public void windowIconified(WindowEvent event)
      {
      }

      public void windowDeiconified(WindowEvent event)
      {
      }

      public void windowOpened(WindowEvent event)
      {
      }

      public void windowClosed(WindowEvent event)
      {
      }

      public void windowActivated(WindowEvent event)
      {
      }

      public void windowDeactivated(WindowEvent event)
      {
      }

      public void windowClosing(WindowEvent event)
      {
            cleanup();
            dispose();
            System.exit(0);
      }

      public static void main(String[] args)
      {
            Enumeration             ports;
            CommPortIdentifier      portId;
            boolean                  allPorts = true,
                              lineMonitor = false;
            int                  idx = 0;

            win = new BlackBox();
            win.setLayout(new FlowLayout());
            win.setBackground(Color.gray);

            portDisp = new SerialPortDisplay[4];

            while (args.length > idx)
            {
                  if (args[idx].equals("-h"))
                  {
                        printUsage();
                  }

                  else if (args[idx].equals("-f"))
                  {
                        friendly = true;
      
                        System.out.println("Friendly mode");
                  }

                  else if (args[idx].equals("-n"))
                  {
                        threaded = false;
      
                        System.out.println("No threads");
                  }

                  else if (args[idx].equals("-l"))
                  {
                        lineMonitor = true;
      
                        System.out.println("Line Monitor mode");
                  }

                  else if (args[idx].equals("-m"))
                  {
                        modemMode = true;
      
                        System.out.println("Modem mode");
                  }

                  else if (args[idx].equals("-s"))
                  {
                        silentReceive = true;
      
                        System.out.println("Silent Reciever");
                  }

                  else if (args[idx].equals("-d"))
                  {
                        idx++;
                        rcvDelay = new Integer(args[idx]).intValue();
      
                        System.out.println("Receive delay = "
                                      + rcvDelay + " msecs");
                  }

                  else if (args[idx].equals("-p"))
                  {
                        idx++;

                        while (args.length > idx)
                        {
                              /*
                               *  Get the specific port
                               */
            
                              try
                              {
                                    portId =
                                       CommPortIdentifier.getPortIdentifier(args[idx]);

                                    System.out.println("Opening port "
                                              + portId.getName());
      
                                    win.addPort(portId);
                              }
      
                              catch (NoSuchPortException e)
                              {
                                    System.out.println("Port "
                                                  + args[idx]
                                                  + " not found!");
                              }

                              idx++;
                        }

                        allPorts = false;

                        break;
                  }

                  else
                  {
                        System.out.println("Unknown option "
                                      + args[idx]);
                        printUsage();
                  }

                  idx++;
            }

            if (allPorts)
            {
                  /*
                   *  Get an enumeration of all of the comm ports
                   *  on the machine
                   */
      
                  ports = CommPortIdentifier.getPortIdentifiers();
      
                  if (ports == null)
                  {
                        System.out.println("No comm ports found!");
      
                        return;
                  }

                  while (ports.hasMoreElements())
                  {
                        /*
                         *  Get the specific port
                         */
      
                        portId = (CommPortIdentifier)
                                          ports.nextElement();

                        win.addPort(portId);
                  }
            }

            if (portNum > 0)
            {
                  if (lineMonitor)
                  {
                        if (portNum >= 2)
                        {
                              portDisp[0].setLineMonitor(portDisp[1],
                                                   true);
                        }

                        else
                        {
                              System.out.println("Need 2 ports for line monitor!");
                              System.exit(0);
                        }
                  }
            }

            else
            {
                  System.out.println("No serial ports found!");
                  System.exit(0);
            }
          }

      private void addPort(CommPortIdentifier      portId)
      {
            /*
             *  Is this a serial port?
             */

            if (portId.getPortType()
             == CommPortIdentifier.PORT_SERIAL)
            {
                  //  Is the port in use?      

                  if (portId.isCurrentlyOwned())
                  {
                        System.out.println("Detected "
                                       + portId.getName()
                                       + " in use by "
                                       + portId.getCurrentOwner());
                  }

                  /*
                   *  Open the port and add it to our GUI
                   */

                  try
                  {
                        portDisp[portNum] = new
                              SerialPortDisplay(portId,
                                            threaded,
                                            friendly,
                                            silentReceive,
                                            modemMode,
                                            rcvDelay,
                                            win);

                        this.portNum++;
                  }

                  catch (PortInUseException e)
                  {
                        System.out.println(portId.getName()
                                       + " in use by "
                                       + e.currentOwner);
                  }
            }
      }

      public void addPanel(SerialPortDisplay      panel)
      {
            Dimension      dim;
            Insets            ins;

            win.add(panel);

            win.validate();

            dim = panel.getSize();

            ins = win.getInsets();

            dim.height = ((this.panelNum + 1) * (dim.height + ins.top
                                          + ins.bottom)) + 10;

            dim.width = dim.width + ins.left + ins.right + 20;

            win.setSize(dim);

            win.show();

            panelNum++;
      }

      static void printUsage()
      {
            System.out.println("Usage: BlackBox [-h] | [-f] [-l] [-m] [-n] [-s] [-d receive_delay] [-p ports]");

            System.out.println("Where:");

            System.out.println("\t-h      this usage message");

            System.out.println("\t-f      friendly - relinquish port if requested");

            System.out.println("\t-l      run as a line monitor");

            System.out.println("\t-m      newline is \\n\\r (modem mode)");

            System.out.println("\t-n      do not use receiver threads");

            System.out.println("\t-s      don't display received data");

            System.out.println("\t-d      sleep for receive_delay msecs after each read");

            System.out.println("\t-p      list of ports to open (separated by spaces)");

            System.exit(0);
      }

      private void cleanup()
      {
            SerialPort      p;

            while (portNum > 0)
            {
                  portNum--;
                  panelNum--;

                  /*
                   *  Close the port
                   */

                  p = portDisp[portNum].getPort();

                  if (p != null)
                  {
                        System.out.println("Closing port "
                                       + portNum
                                       + " ("
                                       + p.getName()
                                       + ")");

                        portDisp[portNum].closeBBPort();
                  }
            }
      }
}


Hope it helps! k.
0
 
LVL 3

Accepted Solution

by:
oraelbis earned 250 total points
ID: 10666705
On jdk1.4, you need copy files into another places:

Copy comm.jar to   %JAVA_HOME%\jre\lib\ext
Copy javax.comm.properties to  %JAVA_HOME%\jre\lib
Copy win32com.dll to  %JAVA_HOME%\bin

see:
http://www.experts-exchange.com/Programming/Programming_Languages/Java/Q_20661635.html#8810978
0
 
LVL 1

Author Comment

by:kender_a
ID: 10668698
DIRECT HIT!
0

Featured Post

Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
Viewers learn about the “while” loop and how to utilize it correctly in Java. Additionally, viewers begin exploring how to include conditional statements within a while loop and avoid an endless loop. Define While Loop: Basic Example: Explanatio…
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now