Solved

CommPortIdentifier doesn't find any ports

Posted on 2004-03-24
3
857 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Suggested Solutions

Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers will learn about basic arrays, how to declare them, and how to use them. Introduction and definition: Declare an array and cover the syntax of declaring them: Initialize every index in the created array: Example/Features of a basic arr…
The viewer will learn how to implement Singleton Design Pattern in Java.
Suggested Courses

734 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