Java 找不到类

Java 找不到类,java,class,Java,Class,我遇到一些问题,一个程序没有找到所需的类,尽管它们有相同的目录和相同的包声明 Eclipse说“无法找到或运行主类”,所以我尝试手动编译它。以下是编译器所说的: Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten. C:\Users\Gilbert>cd C:\Users\Gilbert\Desktop\factory C:\User

我遇到一些问题,一个程序没有找到所需的类,尽管它们有相同的目录和相同的包声明

Eclipse说“无法找到或运行主类”,所以我尝试手动编译它。以下是编译器所说的:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.

C:\Users\Gilbert>cd C:\Users\Gilbert\Desktop\factory

C:\Users\Gilbert\Desktop\factory>"C:\Program Files\Java\jdk1.7.0_45\bin\javac" P
rodukt.java

C:\Users\Gilbert\Desktop\factory>"C:\Program Files\Java\jdk1.7.0_45\bin\javac" S
tation.java

C:\Users\Gilbert\Desktop\factory>"C:\Program Files\Java\jdk1.7.0_45\bin\javac" L
ine.java

Line.java:8: error: cannot find symbol
        private Produkt produkt;
                ^
  symbol:   class Produkt
  location: class Line

Line.java:9: error: cannot find symbol
        private ArrayList<Station> stations;
                          ^
  symbol:   class Station
  location: class Line

Line.java:12: error: cannot find symbol
        public Line(String name, Produkt produkt){
                                 ^
  symbol:   class Produkt
  location: class Line

Line.java:17: error: cannot find symbol
        public void add(Station station){
                        ^
  symbol:   class Station
  location: class Line

Line.java:25: error: cannot find symbol
        public Station getStation(int number){
               ^
  symbol:   class Station
  location: class Line

5 errors
文件2:

package factory;

public class Station{

    private int number;
    private int time;

    public Station(int number, int time){
        this.number = number;
        this.time = time;
    }

    public int getNumber(){
        return this.number;
    }

    public void setNumber(int number){
        this.number = number;
    }

    public int getTime(){
        return this.time;
    }

    public void setTime(int time){
        this.time = time;
    }   
}
文件3:

package factory;

import java.util.ArrayList;

public class Line{

    private String name;
    private Produkt produkt;
    private ArrayList<Station> stations;
    private int time;

    public Line(String name, Produkt produkt){
        this.name = name;
        this.produkt = produkt;
    }

    public void add(Station station){
        stations.add(station.getNumber(), station);
    }

    public String getName(){
        return this.name;
    }

    public Station getStation(int number){
        return stations.get(number);
    }

    public String getProduktName(){
        return produkt.getName();
    }

    public int getTime(){

        for (int i = 0; i < stations.size(); i++){
            this.time = this.time + stations.get(i).getTime();
        }
        return this.time;
    }

    public int getStations(){
        return stations.size();
    }
}
}

它使用了另一个我没有展示的类,因为它是所有类中最长的。 我没有显示主类,因为错误发生在我尝试编译主类或其他类时。我只能编译那些没有引用包中其他类的类,比如produkt和station,但是任何其他类都找不到它们,尽管它们都是包的一部分,并且都在directoy中

  • 您需要一个带有
    main
    方法的类

  • 由于这些类相互依赖,因此在单独编译时会出现所有这些错误。您需要使用
    javac*.java

  • 事件在执行2之后,您的程序将不会运行,因为1

  • 如果您不知道,这是一个
    main
    方法

    public static void main(String[] args) {
    }
    
    创建另一个类以运行应用程序。像这样的

    public class App {
        public static void main(String[] args) {
    
            Produkt p = new Produkt("product");
            Line line = new Line("line", p);
            line.add(new Station(1, 2));
            ....
        }
    }
    

    其他注释。

    • 我不确定你想要这个

      public void add(Station station){
          stations.add(station.getNumber(), station);
      }
      
      在您使用的
      add
      方法中,第一个参数是
      ArrayList
      的索引。这将给您带来问题,而且索引可能不存在

      add(int index, E element)
            Inserts the specified element at the specified position in this list.
      
      照办

      stations.add(station);
      
    • 您应该在构造函数中初始化
      。如果不这样做,您将面临
      NullPointerException

      public Line(String name, Produkt produkt){
          this.name = name;
          this.produkt = produkt;
          station = new ArrayList<Station>();
      }
      
      改为

      if ("factory".equals(parts[0]))
      
      更改所有的

    • 我在编译你的代码时遇到问题

    • 您可能还需要设置启动配置。您需要在项目上单击鼠标右键,然后转到“属性”。单击运行/调试设置。如果您的
      Main
      类不在该列表中,请单击新建,然后单击Java应用程序,然后查找您的类并确保它是主类。确保使用完全限定的名称,例如mypackage.Main


    有没有理由不在这个问题中包含主类

    应用程序需要

    public static void main(Strings args[]){
    }
    
    编撰 但是,让我们谈谈您试图从命令行运行的情况。 cd-更改目录 C:\Users\Gilbert\Desktop\factory>“C:\Program Files\Java\jdk1.7.0\u 45\bin\javac”P rodukt.Java

    好的,您将目录更改为C:\Users\Gilbert\Desktop\factory 那么,出于某种原因,您在引号中列出了“C:\ProgramFiles\Java\jdk1.7.0\U 45\bin\javac”,为什么? 阶段1:将目录更改为类文件的实际位置,该类文件应为包含以下内容的类:

    public static void main(String args[]){
    }
    
    因此,换言之,应采取以下措施: cd C:\Users\Gilbert\Desktop\factory\此处包含主类的实际文件夹


    javac Main.java(编译主类)

    好的,所以我解决了它,但我的解决方案仍然有一个问题:

    如果我从包中取出主类并导入它(导入工厂。*;) 我可以编译并运行它,但我的任务禁止我使用默认包。 我自己的包之外的主类不违反这个规则吗


    谢谢你的回答

    您需要一个主方法来运行应用程序请参见下面的“我的更新”。第三点可能会帮助你。不,它不会违反任何规则。你可以在任何地方上主课。您只需要输入所有必要的内容。我也不知道“禁止”这个词是否正确。我想eclipse只是给了你一个警告,不要使用默认包。实际上,这个程序是我学习中的一项任务。“无默认包”只是一个规则,我不知道它有什么意义。
    if ("factory".equals(parts[0]))
    
    public static void main(Strings args[]){
    }
    
    public static void main(String args[]){
    }