Java不会编译由我创建的对象

时间:2011-02-09 23:11:05

标签: java compilation compiler-errors

每次我尝试编译创建我创建的类实例的代码时,我最近都遇到了这个Java编译错误。我尝试手动编译,从不同的位置编译,甚至尝试在安全模式下编译。我还在我的计算机上完全重新安装了Java。这是我写的代码示例和我总是得到的错误:
实例创建者类:

public class Nothing {
    public static void main(String args[]) {
        Can World = new Can();
    }
}

实例化课程:

public class Can {
    public Can() {
        System.out.println("Test");
    }
}

编译错误:

Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
        Can World = new Can();
        ^
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
        Can World = new Can();
                        ^
2 errors

比我更了解Java的人试图编译我遇到问题但没有成功的文件。此外,当我从Eclipse,我的IDE中运行代码时,它运行得如此。

任何建议或解决方案真的非常值得赞赏。我真的很讨厌这样的东西阻止我编程。再次感谢。

编辑:我曾经能够像这样编译类,直到最近才开始收到这个错误。我正在使用我在Eclipse IDE中创建的外部工具进行编译,但我也尝试通过导航到CMD窗口中两个文件所在的目录并使用javac Nothing.java进行编译,但同样的错误也出现了。我还尝试首先编译Can.java(编译),然后编译Nothing.java,但这也失败了。这是我从CMD窗口编译时得到的文本:

02/09/2011  06:44 PM    <DIR>          .
02/09/2011  06:44 PM    <DIR>          ..
02/09/2011  03:45 PM               289 .classpath
02/09/2011  03:45 PM               382 .project
02/09/2011  03:45 PM    <DIR>          .settings
02/09/2011  06:00 PM                75 Can.java
02/09/2011  05:49 PM               102 Nothing.java
               4 File(s)            848 bytes
               3 Dir(s)  64,669,216,768 bytes free

C:\Users\Alex\Mindstorms\NXT\leJOS NXJ\Moment>javac Nothing.java
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
                Can World = new Can();
                ^
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
                Can World = new Can();
                                ^
2 errors

3 个答案:

答案 0 :(得分:2)

问题是您需要具有适当的import语句(如果在单独的包中),并且您需要从相应的目录运行Java编译器。假设你的目录结构如下:

src/
   com/
      yourdomain/
         example/
            Can.java
            Nothing.java

然后,您需要在* .java文件的顶部添加以下内容:

package com.yourdomain.example;

你应该在Nothing.java中加入以下import语句(从技术上讲,当它们都在同一个包中时,这是不必要的,但在单独的包中是必要的,这是一个好习惯):

import com.yourdomain.example.Can;

然后你将从src目录中调用编译器,如下所示:

 javac com/yourdomain/example/*.java

然后您可以使用以下命令运行此程序:

 java com.yourdomain.example.Nothing

顺便说一下,你真的不应该这样手工制作项目;您应该使用自动构建系统,例如MavenAnt。如果使用NetBeans IDE创建项目,除了为您提供简单的“构建”,“运行”和“构建和运行”按钮以及各种不错的IDE功能(代码突出显示,增量编译和建议)修复),它将为您生成一个Ant构建项目。

修改
根据您更新的问题,...请注意,Eclipse的编译器与javac不同。如果您使用Cygwin安装了javac,或者您已经在Windows和UNIX之间共享文件(可能通过版本控制系统),则可能会遇到编码问题。我建议以UTF-8重新保存这些文件并运行unix2dos(反之亦然,如果你通过Cygwin安装了javac)并重新编译。如果这不起作用,可能值得重新安装javac。如果做不到这一点,总会有Ubuntu;)。

答案 1 :(得分:1)

将您为每个类呈现的代码放入单独的文件(当然,名为Can.java和Nothing.java),并将这两个文件放在同一目录中,然后使用命令行编译器为我编译:

javac Nothing.java

该错误表示编译器在编译Nothing时无法找到Can类。你有两个文件在同一个目录?

答案 2 :(得分:0)

我已经弄清楚了。事实证明,我曾尝试在我的计算机上使用Java设置旧版本的Lego Robotics,并且我创建了一些环境变量来配合它。其中一个是CLASSPATH变量。我非常有信心Java试图读取该变量(我不再使用它)来查找我的类。一旦我删除它(和我没有使用的其他旧变量),重新启动我的电脑,并重新安装JDK,一切正常。

感谢大家的帮助,但是:)