使用Eclipse IDE可以完美地编译和运行Java程序,但是当我使用' javac'它导致错误

时间:2017-10-18 22:55:27

标签: java eclipse terminal javac

我是Eclipse和java编程的新手,所以请保持温和,非常感谢任何帮助。

我最近用java和Eclipse IDE编写了一个程序。

我做了以下课程:

package Test;
import java.util.*;
import Test.AnotherClass;

public class Program{
  public static void main(String[] args){
    AnotherClass ac = new AnotherClass();
    ac.callingAMethod();
  }
}

这个类位于一个名为Program.java的文件中,我创建了另一个名为AnotherClass.java的文件,它的实现如下:

package Test;
import java.util.*;

public class AnotherClass{
  public void callingAMethod(){
    System.out.println("Hello, World!");
  }
}

现在,如果我使用Eclipse,那么程序运行完美,甚至将输出显示为" Hello,World!"在Eclipse的控制台中。但是,如果我使用Terminal和javac进行编译,则会给出以下错误:

  

Program.java:3:错误:找不到符号导入Test.AnotherClass;                                           ^符号:类AnotherClass位置:包测试Program.java:58:错误:不能   找到符号AnotherClass ac = new AnotherClass(); ^符号:
  class AnotherClass location:class Program Program.java:58:错误:   找不到符号AnotherClass ac = new AnotherClass();                                                            ^符号:类AnotherClass位置:类程序3错误

另一个问题是Eclipse在/ bin中创建了内置的.class文件,如果我在终端上执行,那么它会给我以下错误:

  

错误:无法找到或加载主类程序

我无法找到问题,为什么程序可以在Eclipse IDE中编译并显示输出,而当我使用' javac'编译然后使用' java'运行它会引发错误。

感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:0)

首先应该编译类AnotherClass.java和Program.java来创建二进制文件(.class文件),如下所示:

javac Program.java AnotherClass.java 

然后你应该去包名" test"存在。然后你应该在调用包含main方法的类时运行下面的命令,该命令也包括类路径:

java -classpath . test.Program

答案 1 :(得分:0)

当你尝试使用javac编译Program.java时,它正在期待AnotherClass的类文件,就像你在这个类中引用它一样,即使eclipse在你运行代码时创建了这个类文件javac是不知道这个类文件,所以第一个错误的解决方案是

  1. 首先使用javac编译AnotherClass.java然后编译Program.java

  2. 第二个问题是当你在包中包含一个类并使用javac编译它不会创建包结构时,创建包结构给出下面的命令

    javac -d。 AnotherClass.java

    javac -d。 Program.java

    java Test.Program

  3. 你可以替换"。"在任何目录中,我都给了#34;。"在同一目录中创建包结构。这为您提供了所需的输出

答案 2 :(得分:0)

要使用命令行进行编译,您应该指定除类名之外的一些参数,以便一次编译多个文件:

javac -sourcepath src -d bin src\Test\Program.java

它将找到并编译所有相关类以及位于源路径Program.java中的AnotherClass.java,即src,并将所有已编译的类放在bin中就像日食一样。

执行位于bin下的程序:

java -classpath bin Test.Program

它将在bin中找到已编译的类并执行它。