【问题标题】:Java imported package does not existJava导入包不存在
【发布时间】:2013-05-06 10:58:03
【问题描述】:

我正在尝试使用 pdfbox 编写一个简单的 pdf 文件,但问题是我收到错误:

cannot find symbol class PDDocument

我已将 jar 文件下载到程序所在的同一文件夹中。如何修复这个编译错误?

package org.apache.pdfbox.pdmodel.PDDocument;

import java.io.*;
import org.apache.pdfbox.pdmodel.PDDocument;

public class pdf
{
public static void main(String args[])
{
}
}

【问题讨论】:

  • 这个来自 javac 的编译错误是在命令行上运行的,还是来自您的 IDE?将 jar 放在同一目录中是不够的 - 您需要将其添加到您正在使用的工具的类路径中。
  • package org.apache.pdfbox.pdmodel.PDDocument; 你的包不应该是现有类的完全限定名!
  • 谢谢安德鲁。我现在将其删除。

标签: java import compiler-errors classpath


【解决方案1】:

将 jar 放在同一个文件夹或包中不会将其添加到类路径中。在运行 java 程序时,您需要在类路径中提及 jar 的路径。这是它的语法:

编译:

javac -classpath .;yourjar.jar src/your/package/*.java

运行

java -classpath .;yourjar.jar src/your/package/yourprogrammeclassname

【讨论】:

  • 编译可以设置CLASSPATH环境变量。
  • 您的代码使用的任何不是您自己编写的类都需要向编译器指出它们的位置,以便在编译所有内容时可以将它们链接到您的代码中。这些类的文件系统路径称为类路径。有两种方法可以告诉编译器在哪里寻找外部类。一种是在调用编译器时传递“-classpath”标志,并在其后面加上一个以分号分隔的路径列表,其中可以找到类。
  • 我刚刚安装了eclipse。我已经安装了 eclipse 并添加了 jar 文件,但是我收到了这个错误:声明的包“org.apache.pdfbox.examples.pdmodel”与预期的包“”pdf.java /Test/src 第1行Java 问题不匹配这个是我的导入语句和包“package org.apache.pdfbox.examples.pdmodel; import java.io.*; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.pdmodel.PDDocument; import org. apache.pdfbox.pdmodel.PDPage; 有什么问题吗?
  • 感谢大家为此付出了这么多。如果没有你们大家就无法完成。它是类路径。我希望以已解决的方式结束问题。
【解决方案2】:

您需要确保 JAR 文件位于类路径中。

【讨论】:

  • 感谢您的回复。为了确保我使用了很好的示例,我使用了 apache 网站上的 CreateBlankPDF.java。为了编译,我这样做了 javac -cp pdfbox-1.8.1.jar CreateBlankPDF.java 并运行程序,我这样做了:java -classpath pdfbox-1.8.1.jar CreateBlankPDF Exception in thread "main" java.lang .NoClassDefFoundError: CreateBlankPDF 原因:java.lang.ClassNotFoundException: CreateBlankPDF
【解决方案3】:

遇到类似问题,我发现我在 java 源代码的导入行中没有正确的语法

进行如下编译(在 Windows 上):

javac -cp .;commons-io-2.4.jar AgeFileFilterTest.java

commons-io-2.4.jar 与 AgeFileFilterTest.java 位于同一文件夹中

我遇到了错误:

import org.apache.*;
^
AgeFileFilterTest.java:24: error: cannot find symbol
            displayFiles(directory, new AgeFileFilter(cutoffDate));
                                        ^

这令人费解,因为似乎一切都已到位; jar 位于文件夹中,在类路径中定义,在检查 jar 内容后,我可以看到引用的内容 - 使用 7zip 打开 jar 文件并可以看到:

commons-io-2.4.jar\org\apache\commons\io\filefilter\AbstractFileFilter.class

然后我读到了一些帖子“你不导入类”,这让我想到了导入语法......

我把它改成:

import org.apache.*;

改成:

import org.apache.commons.io.filefilter.*;

和 wala 编译错误消失使用: javac -cp .;commons-io-2.4.jar AgeFileFilterTest.java

程序使用

java -cp .;commons-io-2.4.jar AgeFileFilterTest

【讨论】:

    猜你喜欢
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    相关资源
    最近更新 更多