线程“主”中的异常java.lang.NoClassDefFoundError:gnu / io / SerialPortEventListener

问题描述 投票:0回答:1

我是编码新手,我想将我的pi连接到Schneider pm 1200以获得保持寄存器的值。当我执行它时,我遇到了许多与异常有关的错误。

我正在使用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.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.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 modbus
1个回答
0
投票

在运行时,为Java程序执行的代码从“类文件”开始,由编译器存储在扩展名为“ .class”的文件中。这些文件通常以组的形式打包在“ jar文件”中,并且Java运行时可以在运行时在jar文件中找到类。

您的错误表明运行时找不到指定的类。 jar文件rxtx-2.1.7.jar中似乎提供了java.io.SerialPortEventListener类。您可以下载该文件(搜索其可靠来源)并将其复制到目标计算机。然后,您需要阅读什么是类路径。您可以在环境变量中设置类路径,也可以在运行时使用传递给“ java”命令的参数来设置类路径。无论哪种方式,运行程序都可以在运行程序时在该jar文件中找到该类。

我在这里谈到了一些概念;很抱歉,这不是一个真正简单的1-2-3类型的答案,但是在编写更多代码时,您需要了解jar文件和类路径。

© www.soinside.com 2019 - 2024. All rights reserved.