为了方便您阅读,将问题细致如下(高手喜欢难题,但是希望这样的题目不会难到高手~~):
功能说明:程序的功能是用javax.comm实现计算机与串口的通信。连接到电脑上的串口为COM3。
问题说明:首先,硬件之间的通信规则是:
                要在所有的端口中通过枚举的方法找到COM3,这时要调整serialPort的参数如下:
                serialPort.setSerialPortParams(19200,
                SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
                SerialPort.PARITY_MARK);
          其次,要发送硬件识别的地址,在COM3上连接的硬件需要PC的指令激活。
                命令为16进制的1byte数据:0xFF
                这样的命令送到COM3上,该硬件将自动将自己的串口参数改为(19200,8,1,S)。
          再次,调整PC上的serialPort参数:
                serialPort.setSerialPortParams(19200,
                SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
                SerialPort.PARITY_SPACE);
                这时,二者的信道参数配置一样了,可以通信了!
          最后,由PC传递命令,例如想获得该硬件的ID可以发如下的5byte命令:
                0x80+0x00+0x00+0x00+0x80.这时,硬件将该数据送到COM3.
调试结果:
               COM3已经被打开了!
               硬件地址已经发送!
               javax.comm.UnsupportedCommOperationException: Unsupported parity value               at com.sun.comm.Win32SerialPort.setSerialPortParams(Win32SerialPort.java:268)
               at SimpleSerial.checkSerialPort(SimpleSerial.java:61)
               at SimpleSerial.<init>(SimpleSerial.java:35)
               at SimpleSerial.main(SimpleSerial.java:165)
               javax.comm.UnsupportedCommOperationException: Unsupported parity value               at com.sun.comm.Win32SerialPort.setSerialPortParams(Win32SerialPort.java:268)
               at SimpleSerial.checkSerialPort(SimpleSerial.java:85)
               at SimpleSerial.<init>(SimpleSerial.java:35)
               at SimpleSerial.main(SimpleSerial.java:165)
               Exception in thread "main" java.lang.NullPointerException               at SimpleSerial.checkSerialPort(SimpleSerial.java:118)
 at SimpleSerial.<init>(SimpleSerial.java:35)
 at SimpleSerial.main(SimpleSerial.java:165)
获得读卡器ID命令已经发送!该函数的几处异常找了网上的资料,原来是和先后经过奇偶校验的参数改变有关。但是并没有找到解决的方案。最后将整体的代码贴出:import java.io.*;
import java.util.*;import javax.comm.*;public class SimpleSerial { /* 变量定义 */
 CommPortIdentifier portId; Enumeration portList; OutputStream outputStream; InputStream inputStream; byte[] readBuffer = new byte[60]; String str = ""; byte data[] ;
 SerialPortEventListener EventListener;
 SerialPortEvent event; SerialPort serialPort; boolean flag; public SimpleSerial(){
        checkSerialPort();
 } public void checkSerialPort() {
  portList = CommPortIdentifier.getPortIdentifiers();
  //检查是否具有通信的端口
  if (portList == null) {
   System.out.println("没有通信端口!程序结束!");
   //System.exit(0);
  }
  while (portList.hasMoreElements()) {   portId = (CommPortIdentifier) portList.nextElement();
   if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
    if (portId.getName().equals("COM3")) {
         //该端口已经被占用了?
     if (portId.isCurrentlyOwned()) {
      System.out.println("对不起!" + portId.getName()
        + "已经被占用了!");
     }
     try {
      serialPort = (SerialPort) portId.open("SimpleSerial",15000);
      System.out.println("COM3已经被打开了!");
     } catch (PortInUseException e) {
     }
     try {
      serialPort.setSerialPortParams(19200,
        SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
        SerialPort.PARITY_MARK);
     } catch (UnsupportedCommOperationException e) {
      e.printStackTrace();
     }
     try {
      outputStream = serialPort.getOutputStream();
      outputStream.write(0xff);
      System.out.println("广播地址已经发送!");
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
        }    //延时5s
     try {
      Thread.sleep(3000);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }       //开始向函数发送获得读卡器ID的命令
     try {
      serialPort.setSerialPortParams(19200,
        SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
        SerialPort.PARITY_SPACE);
     } catch (UnsupportedCommOperationException e) {
      e.printStackTrace();
     }
     try {
      outputStream = serialPort.getOutputStream();
      outputStream.write(0x80);
      outputStream.write(0x00);
      outputStream.write(0x00);
      outputStream.write(0x00);
      outputStream.write(0x80);
      System.out.println("获得读卡器ID命令已经发送!");
     } catch (IOException e) {
      e.printStackTrace();
        }    //接受信息
     try {
      inputStream = serialPort.getInputStream();
     } catch (IOException a) {
     }                /*设置SerialPortEventListener,获取数据,并送显!*/
      try   {
              serialPort.addEventListener(EventListener);
      }   catch   (TooManyListenersException   e)   {}      /* 侦听到串口有数据,触发串口事件*/
      serialPort.notifyOnDataAvailable(true);
      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:
       try {
        while (inputStream.available() > 0) {
           System.out.println("已经获得读卡器信息");
        int DeviceID = inputStream.read(readBuffer);
        str=new String(readBuffer);
        }
       } catch (IOException e) {
       }
       /* 接收到的数据存放到文本区中 */
       System.out.println("读卡器的ID已经送显:");
       System.out.println(str);
        try{
                      System.out.println("com3关闭程序结束!");                   }catch(Exception ew){
                      ew.printStackTrace();
                   }
                try {
        Thread.sleep(3000);
       } catch (InterruptedException e) {
        e.printStackTrace();
       }      }
        serialPort.close();
                      }
                      }
  } }
 public void ClosePort(SerialPort serialPort)
    {   serialPort=this.serialPort;
        serialPort.close();
    }
      public static void main(String[] args){
     SimpleSerial p=new SimpleSerial();
     p.checkSerialPort();     System.out.println("程序结束!");
      }
      }
 ----------------------------------------------------------------------------------------------------
---------------------------------感谢赐教------------------------------------------------------------
-----------------------------------------------------------------------------------------------------