【问题标题】:After compile application fails to find main class编译应用程序后找不到主类
【发布时间】:2011-01-24 03:04:21
【问题描述】:

我用两个文件做了一个非常简单的java示例:

Dog.java 包含:

package com.greg.dog;

public class Dog {
    public void bark() {
        System.out.println("bark");
    }
}

TestDog.java 包含:

package com.greg.dog;

public class TestDog {
   public static void main(String args[]) {
        Dog d = new Dog();
        d.bark();
    }
}

我在 ~/Desktop/test/src/com/greg/dog 位置有这两个文件

当我编译它们时,Dog.java 可以正常编译,但 TestDog.java 找不到我的 Dog 类:

user1@blackpearl:~/Desktop/test/src/com/greg/dog$ javac Dog.java 
user1@blackpearl:~/Desktop/test/src/com/greg/dog$ javac TestDog.java 
TestDog.java:6: cannot find symbol
symbol  : class Dog
location: class com.greg.dog.TestDog
        Dog d = new Dog();
        ^
TestDog.java:6: cannot find symbol
symbol  : class Dog
location: class com.greg.dog.TestDog
        Dog d = new Dog();
                    ^
2 errors

我在 Ubuntu 上,这里是所有 java 信息​​:

java version "1.6.0_0"
IcedTea6 1.3.1 (6b12-0ubuntu6.7) Runtime Environment (build 1.6.0_0-b12)
OpenJDK 64-Bit Server VM (build 1.6.0_0-b12, mixed mode)

有什么想法我可能做错了吗?我需要导入 Dog.java 吗?我做错包了吗?

更新

根据 Anon 的建议,我将目录更改为 src 目录,并且所有内容都可以编译。但是,当我运行 TestDog.java 时,出现此错误:

user1@blackpearl:~/Desktop/test/src$ java com/greg/dog/TestDog.java 
Exception in thread "main" java.lang.NoClassDefFoundError: com/greg/dog/TestDog/java
Caused by: java.lang.ClassNotFoundException: com.greg.dog.TestDog.java
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
Could not find the main class: com/greg/dog/TestDog.java. Program will exit.

【问题讨论】:

    标签: java package javac


    【解决方案1】:

    Java 编译器期望其他类位于适合包的目录中相对于调用编译器的位置

    你会想要使用类似的东西进行编译:

    user1@blackpearl:~/Desktop/test/src$ javac com/greg/dog/Dog.java
    user1@blackpearl:~/Desktop/test/src$ javac com/greg/dog/TestDog.java
    

    【讨论】:

    • 谢谢。从该目录编译两者都有效,但是当我去运行它时,我得到一个找不到类的错误。查看更新。
    • @Greg:您不想在启动时使用.java 扩展 - 试试java com/greg/dog/TestDog
    • @Anon:实际上,首选形式是java com.greg.dog.TestDog
    猜你喜欢
    • 2018-06-08
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多