【问题标题】:Strange "cannot find symbol" error (Compiling package from Terminal)奇怪的“找不到符号”错误(从终端编译包)
【发布时间】:2012-11-19 12:22:04
【问题描述】:

首先: 我已经阅读了所有我可以在这里找到的cannot find symbol 线程。他们都没有解决我面临的问题。我不是专业的 Java 开发人员,我只是在帮助同事学习这些课程,所以请放轻松。

我先描述一下基本情况:

我有一个名为 pdfDownload 的包,位于 src/pdfDownload。在这个目录中,我有 2 个文件:PDFItem.javaPDFItemParser.java

两者都是公共课程。您可以在下面找到所附类的代码。我正在使用Eclipse IDE 没有显示任何警告或错误**。

当我编译它们时,我收到以下错误消息:

 PDFItemParser.java:19: cannot find symbol symbol  : class PDFItem
 location: class pdfDownload.PDFItemParser  public static
 ArrayList<PDFItem> parseFile(String filePath){
            ^ PDFItemParser.java:11: cannot find symbol symbol  : class PDFItem location: class pdfDownload.PDFItemParser
    ArrayList<PDFItem> items = parseFile("data.csv");    
              ^ PDFItemParser.java:20: cannot find symbol symbol  : class PDFItem location: class pdfDownload.PDFItemParser         ArrayList<PDFItem>
 items = new ArrayList<PDFItem>();      /* Creates an ArrayList from type
 PDFItem which will contain all parsed ItemObjects */
                  ^ PDFItemParser.java:20: cannot find symbol symbol  : class PDFItem location: class pdfDownload.PDFItemParser
        ArrayList<PDFItem> items = new ArrayList<PDFItem>();        /* Creates an
 ArrayList from type PDFItem which will contain all parsed ItemObjects
 */
                  ^ PDFItemParser.java:21: cannot find symbol symbol  : class PDFItem location: class
pdfDownload.PDFItemParser       items.add(new PDFItem());
                      ^ 5 errors

类都是公开的在正确的目录和包中。对于PDFItem 类中的PDFItem,我还可以在Eclipse 中自动完成。我和我的同事一直在努力解决这个问题 2 个小时。很抱歉,如果这对你们来说真的很容易,但我们无法解决它,因为此错误的常见情况不适用。提前致谢!

编辑:我在 (Mac) 终端中编译它们。我在终端中打开路径,然后输入:

 javac PDFItem.java

然后

 javac PDFItemParser.java

PDFItem - 类代码:

    package pdfDownload;

    public class PDFItem {

        String imageURL;
        String pdfURL;
        boolean imageLoaded;
        boolean pdfLoaded;
        String name;


        public PDFItem() {

        }

        public PDFItem(String name) {
            this.name = name;
        }

    }


PDFItemParser - Class Code:
---------------------------

    package pdfDownload;

    import java.util.ArrayList;
    import java.io.*;


    public class PDFItemParser {

        public static void main(){

        ArrayList<PDFItem> items = parseFile("data.csv");    

        if(items != null){
            System.out.println(items.get(0).name);
        }
    }


        public static ArrayList<PDFItem> parseFile(String filePath){
            ArrayList<PDFItem> items = new ArrayList<PDFItem>();            /* Creates an ArrayList from type PDFItem which will contain all parsed ItemObjects */
            items.add(new PDFItem());

            try{
                FileInputStream fstream = new FileInputStream(filePath);
                DataInputStream in = new DataInputStream(fstream);              /* Get the object of DataInputStream */

                BufferedReader br = new BufferedReader(new InputStreamReader(in));
                String strLine;
                while ((strLine = br.readLine()) != null)   {           /* Read File Line By Line  */

                  System.out.println (strLine);             /* Print the content on the console */

                }
                in.close();             /* Close the input stream */

            }
            catch (Exception e){            /* Catch exception if any */
                System.err.println("Error: " + e.getMessage());
            }

            return items;               /* Returns ArrayList */
        }

    }

【问题讨论】:

  • 你能发布你用来编译的命令吗?
  • 您是否使用任何 IDE,例如 Eclipse、Netbeans、ItelliJ 等?
  • @Muel 我编辑了问题并为您添加了此信息。
  • @reporter 我正在使用 Eclipse 进行编程并在终端中编译它。 (如上所述)

标签: java compiler-construction compiler-errors


【解决方案1】:

您应该使用此命令编译您的类,以确保您的类进入为您的package 创建的文件夹:-

javac -d . PDFItem.java
javac -d . PDFItemParser.java

当您在没有-d 标志的情况下编译它时,那么您的类不在package 文件夹中,实际上是在该文件夹中搜索它们。因此您的PDFItemParser 无法找到您的PDFItem 课程。

另外,请确保您已将路径添加到您的类路径中的package folder。只添加路径到带有包名的文件夹,而不是类名。

【讨论】:

  • 谢谢!这解决了编译错误!我一直在搜索“man javac”和 javac -h 以获取有关软件包的任何提示,但没有找到这个。 :)
  • @Tom.. 很好,现在还要确保您应该使用正确的 main 方法。应该是public static void main(String[] args)。请注意您缺少的参数,否则它会在运行时给您错误。
  • 谢谢。我已经按照下面的建议添加了它。我一直认为只有在您通过控制台运行它并且不确定是否有人会添加参数时才需要这些参数。如果您确定不会传递任何参数,则认为不需要它们。感谢您为我澄清这一点。
  • @Tom。无论你是否传递任何参数,你都不应该改变 main 的基本语法。如果您尝试在 main 中打印 args 参数,而不传递任何参数,您将看到它不是 null。所以实际上创建了一个数组。这是绝对需要的。不客气:)
  • @Tom 我没明白,如果你已经在像 Eclipse 这样的 IDE 中进行编码,为什么还要使用命令行编译?
【解决方案2】:

嘿,您没有正确的main 函数。就是这样:

我改变了这一行

public static void main(){

public static void main(String args[]){

PDFItemParser 类中

现在我可以运行程序了(当然它会给出运行时错误)

Error: data.csv (The system cannot find the file specified)null

编辑

这个错误是意料之中的,因为我没有 data.csv 文件。

我可以在eclipse中编译和运行这个程序,没有任何问题

【讨论】:

  • 主要功能只是为了测试目的而实现的,稍后将被删除。我尝试添加参数,但它没有改变编译错误。于是我又删了。我现在就读。谢谢。 :)
  • 正如我在 edit 中提到的,我可以毫无问题地编译和运行您的程序
猜你喜欢
  • 2021-01-31
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 2014-07-01
  • 2015-11-06
  • 1970-01-01
相关资源
最近更新 更多