首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Java应用程序CommApi操作串口的有关问题!

2012-02-01 
Java应用程序CommApi操作串口的问题!急,在线等!我是用javacomm20-win32来开发串口通讯,有三个文件:comm.ja

Java应用程序CommApi操作串口的问题!急,在线等!
我是用javacomm20-win32来开发串口通讯,有三个文件:comm.jar、javax.comm.properties、win32com.dll

我在装有Eclipse3.2+JDK1.6+JRE1.6的Win   XP   SP2的机子上双击jar文件可以正常运行,可以打开读取串口数据,但是我在另一台装有JRE1.6的Win   XP   SP2的机子上双击可以运行jar文件,也可以打开串口,但是一读取串口数据就出现:java.lang.NullPointerExtion错误,是怎么回事呢,那三个文件我也拷到JRE相应的目录下了,环境变量也设置了,我的代码如下:

PortClass.java源码如下:

package   Sampel;

import   java.io.*;
import   java.util.*;
import   javax.comm.*;

public   class   PortClass   {
       
        static   CommPortIdentifier   portId;
        static   Enumeration   portList;    

        InputStream   inputStream;    
        SerialPort   serialPort;
       
        private   Thread   thread   =   null;
        private   boolean   pPortOpen   =   false;
       
        public   byte[]   readBuffer   =   new   byte[16888];
       
        public   PortClass()   {
               
        }
       
        public   void   MyOpenPort()
        {
                if(OpenPort())
                {
                        pPortOpen   =   true;
                        thread   =   new   Thread(new   PortTest());
                        thread.start();
                }
                else
                {
                        pPortOpen   =   false;
                }
        }
       
        public   void   MyClosePort()
        {
                if(pPortOpen)
                {
                        serialPort.close();
                }
        }
       
        private   boolean   OpenPort()
        {
                portList   =   CommPortIdentifier.getPortIdentifiers();

                while   (portList.hasMoreElements())  
                {
                        portId   =   (CommPortIdentifier)   portList.nextElement();
                        if   (portId.getPortType()   ==   CommPortIdentifier.PORT_SERIAL)  


                        {
                                  if   (portId.getName().equals( "COM1 "))  
                                  {
                                try  
                                {
                                                        serialPort   =   (SerialPort)   portId.open( "MyFrameApp ",   200);
                                                }  
                                catch   (PortInUseException   e)  
                                {
                                return   false;
                                }
                               
                                                try  
                                                {
                                                        inputStream   =   serialPort.getInputStream();
                                                }   catch   (IOException   e)  
                                                {
                                                        return   false;
                                                }
                                                try  
                                                {
                                                        serialPort.setSerialPortParams(115200,


                                                                                SerialPort.DATABITS_8,  
                                                                        SerialPort.STOPBITS_1,  
                                                                        SerialPort.PARITY_NONE);
                                                }   catch   (UnsupportedCommOperationException   e)  
                                                {
                                                                return   false;
                                                }
                                }
                                break;
                        }
                }
                return   true;
        }      

       
        public   class   PortTest   extends   Thread
        {
                public   void   run()
                {
                        while(true)
        {
        try
        {
                thread.sleep(1000);
        }
        catch(Exception   w)   {}
                                try  
                                {
                                        if(pPortOpen)
                                        {
                                                //************************************************


                                                是在下面的inputStream那个变量出错,好像是找不到那  
                                                个变量的指针,可是我是定义为这个类的全局变量的啊
                                                上面找开串口的时候也有inputStream   =                                                 serialPort.getInputStream();这一句了
                                                //************************************************
                                                while   (inputStream.available()   >   0)  
                                                {
                                                        inputStream.read(readBuffer);
                                                }
                                        }
                                }   catch   (IOException   e)   {}
                        }
                }
        }
       
}


以上是不是还有什么东西没有设置,可是我两台机的环境变量和那三个文件所放的位置都是一样的啊。


[解决办法]
两台机的com口名称不一样吧

热点排行