你需要去下载一个包 javacomm20-win32.zip

解决方案 »

  1.   

    用Java Communications API 2.0
      

  2.   

    用Java Communications API,给你一个打开串行端口德例子:
    是调用CommPortIdentifier对象德open()方法,获得一个SerialPort(串行口)对象,src如下:
    import java.awt.*;
    import java.io.*;
    import javax.comm.*;
    import java.util.*;/**
     * Open a serial port using Java Communications.
     *
     * @author Ian F. Darwin, [email protected]
     */
    public class CommPortOpen {
    /** How long to wait for the open to finish up. */
    public static final int TIMEOUTSECONDS = 30;
    /** The baud rate to use. */
    public static final int BAUD = 9600;
    /** The parent Frame, for the chooser. */
    protected Frame parent;
    /** The input stream */
    protected DataInputStream is;
    /** The output stream */
    protected PrintStream os;
    /** The last line read from the serial port. */
    protected String response;
    /** A flag to control debugging output. */
    protected boolean debug = true;
    /** The chosen Port Identifier */
    CommPortIdentifier thePortID;
    /** The chosen Port itself */
    CommPort thePort; public static void main(String[] argv)
    throws IOException, NoSuchPortException, PortInUseException,
    UnsupportedCommOperationException { new CommPortOpen(null).converse(); System.exit(0);
    } /* Constructor */
    public CommPortOpen(Frame f)
    throws IOException, NoSuchPortException, PortInUseException,
    UnsupportedCommOperationException {

    // Use the PortChooser from before. Pop up the JDialog.
    PortChooser chooser = new PortChooser(null); String portName = null;
    do {
    chooser.setVisible(true);

    // Dialog done. Get the port name.
    portName = chooser.getSelectedName(); if (portName == null)
    System.out.println("No port selected. Try again.\n");
    } while (portName == null); // Get the CommPortIdentifier.
    thePortID = chooser.getSelectedIdentifier(); // Now actually open the port.
    // This form of openPort takes an Application Name and a timeout.
    // 
    System.out.println("Trying to open " + thePortID.getName() + "..."); switch (thePortID.getPortType()) {
    case CommPortIdentifier.PORT_SERIAL:
    thePort = thePortID.open("DarwinSys DataComm",
    TIMEOUTSECONDS * 1000);
    SerialPort myPort = (SerialPort) thePort; // set up the serial port
    myPort.setSerialPortParams(BAUD, SerialPort.DATABITS_8,
    SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
    break; case CommPortIdentifier.PORT_PARALLEL:
    thePort = thePortID.open("DarwinSys Printing",
    TIMEOUTSECONDS * 1000);
    ParallelPort pPort = (ParallelPort)thePort; // Tell API to pick "best available mode" - can fail!
    // myPort.setMode(ParallelPort.LPT_MODE_ANY); // Print what the mode is
    int mode = pPort.getMode();
    switch (mode) {
    case ParallelPort.LPT_MODE_ECP:
    System.out.println("Mode is: ECP");
    break;
    case ParallelPort.LPT_MODE_EPP:
    System.out.println("Mode is: EPP");
    break;
    case ParallelPort.LPT_MODE_NIBBLE:
    System.out.println("Mode is: Nibble Mode.");
    break;
    case ParallelPort.LPT_MODE_PS2:
    System.out.println("Mode is: Byte mode.");
    break;
    case ParallelPort.LPT_MODE_SPP:
    System.out.println("Mode is: Compatibility mode.");
    break;
    // ParallelPort.LPT_MODE_ANY is a "set only" mode;
    // tells the API to pick "best mode"; will report the
    // actual mode it selected.
    default:
    throw new IllegalStateException("Parallel mode " + 
    mode + " invalid.");
    }
    break;
    default: // Neither parallel nor serial??
    throw new IllegalStateException("Unknown port type " + thePortID);
    } // Get the input and output streams
    // Printers can be write-only
    try {
    is = new DataInputStream(thePort.getInputStream());
    } catch (IOException e) {
    System.err.println("Can't open input stream: write-only");
    is = null;
    }
    os = new PrintStream(thePort.getOutputStream(), true);
    } /** This method will be overridden by non-trivial subclasses
     * to hold a conversation. 
     */
    protected void converse() throws IOException { System.out.println("Ready to read and write port."); // Input/Output code not written -- must subclass. // Finally, clean up.
    if (is != null)
    is.close();
    os.close();
    }
    }
      

  3.   

    上面的朋友非常感谢,请你可不可以告诉我把javacomm20-win32.zip这个设置编译文件?
      

  4.   

    什么叫设置成编译文件,把这个.jar文件放在%JAVA_HOME%/jre/lib/ext目录下就可用了
      

  5.   

    /*
     * @(#)SimpleWrite.java 1.12 98/06/25 SMI
     *
     * 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.util.*;
    import javax.comm.*;public class Dial_up implements SerialPortEventListener{
        static Enumeration portList;
        static CommPortIdentifier portId;
        static String messageString = "Hello, world!\n";
        static SerialPort serialPort;
        static OutputStream outputStream;
        static InputStream inputStream;    public static void main(String[] args) {
            portList = CommPortIdentifier.getPortIdentifiers();        while (portList.hasMoreElements()) {
                portId = (CommPortIdentifier) portList.nextElement();
                if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                    if (portId.getName().equals("COM1")) {
                    //if (portId.getName().equals("/dev/term/a")) {
                        try {
                            serialPort = (SerialPort)
                                portId.open("SimpleWriteApp", 2000);
                        } catch (PortInUseException e) {}                    try {
                            outputStream = serialPort.getOutputStream();
                        } catch (IOException e) {}                   try {
                         inputStream = serialPort.getInputStream();
                       } catch (IOException e) {}                    try {
                            serialPort.setSerialPortParams(9600,
                                SerialPort.DATABITS_8,
                                SerialPort.STOPBITS_1,
                                SerialPort.PARITY_NONE);
                        } catch (UnsupportedCommOperationException e) {}                    try {
                           serialPort.addEventListener(new SerialListener1());
                        } catch (TooManyListenersException e) {}
                        serialPort.notifyOnDataAvailable(true);                    try {
                            outputStream.write(messageString.getBytes());
                        } catch (IOException e) {}
                    }
                }//end of if COM1
            }//end of while
        }//end of main    public void serialEvent(SerialPortEvent event) {
            switch(event.getEventType()) {
            case SerialPortEvent.BI:
            case SerialPortEvent.OE:
            case SerialPortEvent.FE:
            case SerialPortEvent.PE:
            case SerialPortEvent.CD:
            case SerialPortEvent.CTS:
            case SerialPortEvent.DSR:
            case SerialPortEvent.RI:
            case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
                break;
            case SerialPortEvent.DATA_AVAILABLE:
                byte[] readBuffer = new byte[20];            try {
                    while (inputStream.available() > 0) {
                        int numBytes = inputStream.read(readBuffer);
                    }
                    System.out.print(new String(readBuffer));
                } catch (IOException e) {}
                break;
            }
        }
    }//end of class
      

  6.   

    import java.io.*;
    import java.util.*;
    import javax.comm.*;public class SimpleRead implements Runnable, SerialPortEventListener {
        static CommPortIdentifier portId;
        static Enumeration portList;    InputStream inputStream;
        SerialPort serialPort;
        Thread readThread;    public static void main(String[] args) {
            portList = CommPortIdentifier.getPortIdentifiers();        while (portList.hasMoreElements()) {
                portId = (CommPortIdentifier) portList.nextElement();
                if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                    if (portId.getName().equals("COM1")) {
    //                if (portId.getName().equals("/dev/term/a")) {
                        SimpleRead reader = new SimpleRead();
                    }
                }
            }
        }    public SimpleRead() {
            try {
                serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
            }
            catch (PortInUseException e) {}        try {
                inputStream = serialPort.getInputStream();
            }
            catch (IOException e) {}        try {
                serialPort.addEventListener(this);
            }
            catch (TooManyListenersException e) {}        serialPort.notifyOnDataAvailable(true);
            try {
                serialPort.setSerialPortParams(9600,
                                               SerialPort.DATABITS_8,
                                               SerialPort.STOPBITS_1,
                                               SerialPort.PARITY_NONE);
            }
            catch (UnsupportedCommOperationException e) {}        readThread = new Thread(this);
            readThread.start();
        }    public void run() {
            try {
                Thread.sleep(20000);
            }
            catch (InterruptedException e) {}
        }    public void serialEvent(SerialPortEvent event) {
            System.out.println("event.getEventType() : " + event.getEventType());
            switch (event.getEventType()) {
                case SerialPortEvent.BI:
                case SerialPortEvent.OE:
                case SerialPortEvent.FE:
                case SerialPortEvent.PE:
                case SerialPortEvent.CD:
                case SerialPortEvent.CTS:
                case SerialPortEvent.DSR:
                case SerialPortEvent.RI:
                case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
                    break;
                case SerialPortEvent.DATA_AVAILABLE:
                    byte[] readBuffer = new byte[20];                try {
                        while (inputStream.available() > 0) {
                            int numBytes = inputStream.read(readBuffer);
                        }
                        System.out.print(new String(readBuffer));
                    }
                    catch (IOException e) {}
                    break;
            }
        }
    }