读书人

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

发布时间: 2012-02-01 16:58:19 作者: rapoo

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口名称不一样吧

读书人网 >J2SE开发

热点推荐