【问题标题】:Do I need to import a package from a jar file after setting the classpath?设置类路径后是否需要从 jar 文件中导入包?
【发布时间】:2013-01-04 16:05:46
【问题描述】:

这就是交易 - 我下载了一个需要与 Allen Bradley PLC 通信的 jar 文件。自然地,我设置了 CLASSPATH 并希望能够从 jar 文件中的一个类中创建一个带有构造函数的程序,然后按照我的方式进行操作。事实并非如此。

这是我的类路径:

nick@ubuntu:~/Java/PLC Program$ echo $CLASSPATH
/home/nick/Java/PLC Program/ethernetip4j-0.2.jar

这是我程序中的代码:

ControlLogixConnector test = new ControlLogixConnector(ENBTIP,44818);

我编译并得到以下错误:

nick@ubuntu:~/Java/PLC Program$ javac PLCServer.java
PLCServer.java:13: error: cannot find symbol
    ControlLogixConnector test = new ControlLogixConnector(ENBTIP,44818);
    ^
symbol:   class ControlLogixConnector
location: class PLCServer
PLCServer.java:13: error: cannot find symbol
    ControlLogixConnector test = new ControlLogixConnector(ENBTIP,44818);
                                     ^
symbol:   class ControlLogixConnector
location: class PLCServer
2 errors

我的程序和 jar 文件在同一个目录中。我是否需要导入 jar 文件中的任何包,还是缺少其他完全不同的东西?

提前致谢

编辑:

这是我的代码:

import java.io.*;
import java.net.*;
import se.opendataxchange.ethernetip4j.clx.ControlLogixConnector;

class PLCServer
{
    public static void main(String argv[]) throws IOException
    {
        // IP address of the ethernet card
        String ENBTIP = "192.168.10.14";
        ControlLogixConnector test = new ControlLogixConnector(ENBTIP,44818);
    }
}

我收到错误消息说 se.opendataexchange.ethernetip4j.clx.ControlLogixConnector 不存在并且 ControlLogixConnector 对象不存在(使用 javac PLCServer.java 编译)。

【问题讨论】:

  • 你需要import必修课。在走得太远之前,您可能想退后一步,深入了解 Java 的工作原理;它可能会节省一些时间。
  • jar 可能包含多个包。使用导入。
  • import se.opendataexchange.ethernetip4j.clx.ControlLogixConnector 添加到您的 PLCServer.java 中
  • 我添加了 import se.opendataexchange.ethernetip4j.clx.ControlLogixConnector;并且错误仍然说包不存在@allergic
  • 你用什么命令编译?试试...javac -cp .;ethernetip4j-0.2.jar PLCServer.java

标签: java import classpath plc


【解决方案1】:

您的导入语句import home.nick.Java.PLCProgram.ethernetip4j.*; 似乎表明了jar 在您的项目中的位置。

这是不正确的。

相反,它旨在引用 jar 的 包结构,解析为您尝试使用的类(或类集,如果使用通配符)。

如果你不知道ControlLogixConnector类所在的包,你可以解压jar包,看目录结构应该很明显。 (@allergic 在 cmets 中指出它是se.opendataexchange.ethernetip4j.clx)。

您可以通过反编译 jar 中的 .class 文件、使用 JAD 等实用程序或类似工具来获得更精确的结果。不过,将 Jar 导入任何 IDE 都应该可以解决问题 - jar 中的类应该在树视图中按包分解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-04
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2017-03-01
    • 2012-02-15
    相关资源
    最近更新 更多