找不到类

时间:2014-02-01 13:55:31

标签: 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:\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

这是代码(“试图编译”类,不包括主类):

文件1:

package factory;

public class Produkt{

    private String name;

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

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

    public void setName(String name){
        this.name = name;
    }   
}

文件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();
    }
}

完整程序的下载链接:https://dl.dropboxusercontent.com/u/34761768/factory%20-%20stack%20overflow.zip

编辑:

好的,这是主要课程:

包装厂;

public class Main {

public static void main(String[] args){

    Factory factory = new Factory("");
    factory.reader(args[0]);
    factory.print();
    System.out.println("----");
    factory.printBestWayOf2();
    System.out.println("----");
    factory.printBestWay();

}

}

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

3 个答案:

答案 0 :(得分:2)

  1. 您需要一个使用main方法的课程。

  2. 您正在获取所有这些错误,因为这些类是相互依赖的。您需要使用javac *.java

  3. 同时编译所有内容
  4. 执行2后的事件,您的程序将无法运行,因为1。

  5. 如果你不知道,这是一个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);
      
    • 您应该在构造函数中初始化stations。如果你不这样做,你将面临NullPointerException

      的愤怒
      public Line(String name, Produkt produkt){
          this.name = name;
          this.produkt = produkt;
          station = new ArrayList<Station>();
      }
      
    • 如果您想稍后打印一个对象,可能需要覆盖课程中的toString


    使用其余代码

    更新

    • 不要不将字符串与==进行比较。使用equals

      if (parts[0] == "factory")
      

      更改为

      if ("factory".equals(parts[0]))
      

      更改所有

    • 编译代码时遇到问题。

    • 您可能还需要设置启动配置。您需要右键单击项目,然后转到属性。单击运行/调试设置。如果您的Main类不在该列表中,则单击New,然后单击Java Application,然后找到您的类,确保它是Main Class。确保使用完全限定的名称,例如mypackage.Main

答案 1 :(得分:1)

您是否有理由不在主要课程中加入此问题?

应用程序需要

public static void main(Strings args[]){
}

编译 但是让我们谈谈你试图从命令行运行。 cd - 更改目录 C:\ Users \ Gilbert \ Desktop \ factory&gt;“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”,为什么? 第1阶段:将目录更改为类文件的实际位置,此类文件应该是包含以下内容的类:

public static void main(String args[]){
}

所以换句话说,应该做以下几点 cd C:\ Users \ Gilbert \ Desktop \ factory \包含主类的实际文件夹

javac Main.java(这会编译Main类)

答案 2 :(得分:-1)

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

如果我从包中取出主类,并导入它(import factory。*;) 我可以编译并运行它,但我的任务禁止我使用默认包。 我自己的包装之外的主要课程是否违反了这条规则?

谢谢答案!