Exception in thread "main" java.lang.NoClassDefFoundError: gnu/io/SerialPortEventListener
Exception in thread "main" java.lang.NoClassDefFoundError: gnu/io/SerialPortEventListener
我是编码新手,我想将我的 pi 连接到 Schneider pm 1200 以获取保持寄存器的值。当我执行它时,我遇到了很多与异常相关的错误。
如何写寄存器?
我正在尝试使用 writeSingleRegister 方法,但我无法得到它的寄存器类型错误。
我正在使用 j2mod
jar 文件
这是代码
import com.ghgande.j2mod.modbus.facade.ModbusSerialMaster;
import com.ghgande.j2mod.modbus.Modbus;
import com.ghgande.j2mod.modbus.ModbusException;
import com.ghgande.j2mod.modbus.procimg.Register;
import com.ghgande.j2mod.modbus.util.*;
public class ModbusMaster
{
/**
* @param args
*/
public static void main(String[] args)
{
/* The important instances of the classes mentioned before */
ModbusSerialMaster serialMaster = null; // the connection
/* Variables for storying the parameters */
String portname = "/dev/ttyUSB0"; // the name of the serial port to be used
int unitID = 1 ; // the unit identifier we will be talking to
int startingRegister = 100001; // the reference, where to start reading from
int registerCount = 0; // the count of the input registers to read
Register[] slaveResponse = new Register[registerCount];
try
{
/* Setup the serial parameters */
SerialParameters parameters = new SerialParameters();
parameters.setPortName(portname);
parameters.setBaudRate(9600);
parameters.setDatabits(8);
parameters.setParity("None");
parameters.setStopbits(1);
parameters.setEncoding(Modbus.SERIAL_ENCODING_RTU);
parameters.setEcho(false);
/* Open the connection */
serialMaster = new ModbusSerialMaster(parameters);
serialMaster.connect();
}
catch (Exception exception)
{
exception.printStackTrace();
}
/* Read the first four holding registers */
try
{
slaveResponse = serialMaster.readMultipleRegisters(unitID, startingRegister, registerCount);
for (int i = 0; i < slaveResponse.length; i++)
{
System.out.println("reg" + i + " = " + slaveResponse[i]);
}
}
catch (ModbusException e)
{
e.printStackTrace();
}
/* Close the connection */
serialMaster.disconnect();
}
}
这是输出
Exception in thread "main" java.lang.NoClassDefFoundError: gnu/io/SerialPortEventListener
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access0(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.ghgande.j2mod.modbus.facade.ModbusSerialMaster.<init>(ModbusSerialMaster.java:78)
at ModbusMaster.main(ModbusMaster.java:38)
Caused by: java.lang.ClassNotFoundException: gnu.io.SerialPortEventListener
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 14 more
你的回答对我有帮助。
在 运行 时,为 Java 程序执行的代码从 "class files" 开始,由编译器存储在扩展名为“.class”的文件中.这些文件往往是成组打包在"jar files"中,Java运行的时候可以在运行宁的时候在jar文件中找到classes。
您的错误表明 运行time 找不到指定的 class。 java.io.SerialPortEventListener class 似乎在 jar 文件 rxtx-2.1.7.jar 中可用。您可以下载它(搜索其可靠来源)并将其复制到目标机器。然后,您需要阅读 classpath 是什么;您可以在环境变量中设置 class 路径,或者在 运行 时将参数传递给 "java" 命令。无论哪种方式,当您 运行 您的程序时, 运行time 可以在该 jar 文件中找到 class。
我在这里谈到了一些概念;抱歉,这不是一个真正简单的 1-2-3 类答案,但您需要了解 jar 文件和 class路径,因为您编写更多代码。
我是编码新手,我想将我的 pi 连接到 Schneider pm 1200 以获取保持寄存器的值。当我执行它时,我遇到了很多与异常相关的错误。
如何写寄存器? 我正在尝试使用 writeSingleRegister 方法,但我无法得到它的寄存器类型错误。
我正在使用 j2mod
jar 文件
这是代码
import com.ghgande.j2mod.modbus.facade.ModbusSerialMaster;
import com.ghgande.j2mod.modbus.Modbus;
import com.ghgande.j2mod.modbus.ModbusException;
import com.ghgande.j2mod.modbus.procimg.Register;
import com.ghgande.j2mod.modbus.util.*;
public class ModbusMaster
{
/**
* @param args
*/
public static void main(String[] args)
{
/* The important instances of the classes mentioned before */
ModbusSerialMaster serialMaster = null; // the connection
/* Variables for storying the parameters */
String portname = "/dev/ttyUSB0"; // the name of the serial port to be used
int unitID = 1 ; // the unit identifier we will be talking to
int startingRegister = 100001; // the reference, where to start reading from
int registerCount = 0; // the count of the input registers to read
Register[] slaveResponse = new Register[registerCount];
try
{
/* Setup the serial parameters */
SerialParameters parameters = new SerialParameters();
parameters.setPortName(portname);
parameters.setBaudRate(9600);
parameters.setDatabits(8);
parameters.setParity("None");
parameters.setStopbits(1);
parameters.setEncoding(Modbus.SERIAL_ENCODING_RTU);
parameters.setEcho(false);
/* Open the connection */
serialMaster = new ModbusSerialMaster(parameters);
serialMaster.connect();
}
catch (Exception exception)
{
exception.printStackTrace();
}
/* Read the first four holding registers */
try
{
slaveResponse = serialMaster.readMultipleRegisters(unitID, startingRegister, registerCount);
for (int i = 0; i < slaveResponse.length; i++)
{
System.out.println("reg" + i + " = " + slaveResponse[i]);
}
}
catch (ModbusException e)
{
e.printStackTrace();
}
/* Close the connection */
serialMaster.disconnect();
}
}
这是输出
Exception in thread "main" java.lang.NoClassDefFoundError: gnu/io/SerialPortEventListener
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access0(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.ghgande.j2mod.modbus.facade.ModbusSerialMaster.<init>(ModbusSerialMaster.java:78)
at ModbusMaster.main(ModbusMaster.java:38)
Caused by: java.lang.ClassNotFoundException: gnu.io.SerialPortEventListener
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 14 more
你的回答对我有帮助。
在 运行 时,为 Java 程序执行的代码从 "class files" 开始,由编译器存储在扩展名为“.class”的文件中.这些文件往往是成组打包在"jar files"中,Java运行的时候可以在运行宁的时候在jar文件中找到classes。
您的错误表明 运行time 找不到指定的 class。 java.io.SerialPortEventListener class 似乎在 jar 文件 rxtx-2.1.7.jar 中可用。您可以下载它(搜索其可靠来源)并将其复制到目标机器。然后,您需要阅读 classpath 是什么;您可以在环境变量中设置 class 路径,或者在 运行 时将参数传递给 "java" 命令。无论哪种方式,当您 运行 您的程序时, 运行time 可以在该 jar 文件中找到 class。
我在这里谈到了一些概念;抱歉,这不是一个真正简单的 1-2-3 类答案,但您需要了解 jar 文件和 class路径,因为您编写更多代码。