【问题标题】:java packages: cannot find symboljava包:找不到符号
【发布时间】:2015-01-01 06:22:07
【问题描述】:

我遇到了一个奇怪的错误。我在同一个包中有 2 个类,但它们找不到彼此。据我所知,只要类在同一个包中,它们应该能够调用彼此的方法。

我的代码如下所示:

在 A.java 中:

package com.mypackage;
public class A{
   public static int read(){
    //some code
   }
}

在 B.java 中:

package com.mypackage;
public class B{
  public static void main(String args[]){
    int x = A.read();
  }
}

它给了我一个cannot find symbol variable A 错误。

这两个类都依赖于一些.jar 文件,但我已经将这些jar 的路径包含到CLASSPATHA.java 编译良好,但是B 由于某些原因找不到A...

当我在两个类中删除 package com.mypackage; 时,它们编译得很好。

【问题讨论】:

  • 我没有看到任何类声明。你把它们排除在外了吗
  • 如果A.java 包含一个名为C 的包本地类,即使没有A 类,它也会编译。
  • 你用什么来编译文件?命令等?
  • javac A.java 和 javac B.java。我没有提到的是这两个类都依赖于一些 jar 文件,但是已经包含了这些 jar 到 CLASSPATH 和 A.java 编译好的路径,但是 B 由于某些原因找不到 A...
  • 你是在两个文件上调用 javac,还是一次一个?

标签: java packages


【解决方案1】:

由于您要编译不同包中的 Java 文件,因此您必须确保它们编译到适当的目录。

您可以使用此调用来做到这一点。将$SRC 替换为您的源文件的位置,您可以让$BIN 成为当前目录,或您机器上的其他位置。

javac -sourcepath $SRC -d $BIN A.java B.java

当你想运行它们时,你必须再次手动将它们添加到类路径中(但这并不是一件坏事)。

java -cp $BIN com.mypackage.B

这个调用应该有效;只是用我桌面上的 A.java 和 B.java 来确保它。使用-d 标志,确保在编译时,它们会转到适当的包文件夹方案。

【讨论】:

  • 有效!谢谢!我按照你建议的方式编译了。但是当我运行它时,我必须包含以下 jar 文件的路径(使用 $LIB 作为我的 jar 的路径):java -cp $BIN:$LIB com.mypackage.B 我很惊讶它在编译时不需要我这样做。 ..
  • 我认为您在编译时不需要它们的原因是它们已经存在于您的类路径中。如果不是,则在编译时设置-cp $LIB
【解决方案2】:

应该是:

A.java

package com.mypackage;
class A {
    public static int read(){
       //some code
    }
}

B.java

package com.mypackage;
class B {
    public static void main(String args[]){
       int x = A.read();
    }
}

【讨论】:

  • 是的,对不起,我很着急,忘记在我的帖子中包含它。我刚刚编辑了它。可以再看一遍吗?
猜你喜欢
  • 2014-02-05
  • 2021-08-11
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 2014-02-07
相关资源
最近更新 更多