Solved

CommPortIdentifier doesn't find any ports

Posted on 2004-03-24
3
849 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 Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
hibernate example using maven 12 59
null output 3 35
jmss example java 2 24
Tagging and Merging on Branch 1 30
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.

828 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