爪哇语;“线程中的异常”;“主要”;java.lang.NoClassDefFoundError“;

爪哇语;“线程中的异常”;“主要”;java.lang.NoClassDefFoundError“;,java,Java,我以前也遇到过这个错误,但这让我很困惑,因为现在显然是出于不同的原因,因为我正在做我上次做的事情来避免它。我真的被这件事缠住了,根本不知道该怎么办。这只是我拥有的主类的一个tester类,但这就是发生错误的地方 // test class for "CelciusAndFahrenheit" import java.io.*; class CelCiusAndFahrenhetTester { public static void main(String[] args) thro

我以前也遇到过这个错误,但这让我很困惑,因为现在显然是出于不同的原因,因为我正在做我上次做的事情来避免它。我真的被这件事缠住了,根本不知道该怎么办。这只是我拥有的主类的一个tester类,但这就是发生错误的地方

  // test class for "CelciusAndFahrenheit"

import java.io.*;

class CelCiusAndFahrenhetTester
{
    public static void main(String[] args) throws IOException
    {

    //Making Input and reading to variable 
    String inInput;
    InputStreamReader inStream = new InputStreamReader (System.in);
    BufferedReader reader = new BufferedReader (inStream);
    System.out.println ("Please state which temperature type you are converting to");
    inInput = reader.readLine();

    if (inInput != "Celcius")
        {
            System.out.println ("What is the temperature amount you wish to convert?");
            inInput = reader.readLine();
            CelciusAndFahrenheit temperatureF = new CelciusAndFahrenheit();
            double answer = Double.parseDouble(inInput);
            temperatureF.setFahrenheit(answer);
            temperatureF.tFah();
        } 
    else
        {
            System.out.println ("What is the temperature amount you wish to convert?");
            inInput = reader.readLine();
            CelciusAndFahrenheit temperatureC = new CelciusAndFahrenheit();
            double answer = Double.parseDouble(inInput);
            temperatureC.setCelcius(answer);
            temperatureC.tCel();
        }
    }
}
编辑; 我不会说谎。我不知道这件事。那个教我Java的家伙让他的班级使用记事本和CMD来运行我们的程序,坦白说,我只是迷路了。为了回答其中一些问题,下面是另一个程序

import java.io.*;

// blueprint for "CelciusAndFahrenheit" class
class CelciusAndFahrenheit
{
    // declare instance variable as private
    private double fahrenheit;
    private double celcius;

    // declare getter method public
    public double getFahrenheit()
    {
        return fahrenheit;
    }

    // declare setter method public
    public void setFahrenheit(double tempF)
    {
        fahrenheit = tempF;
    tempF = (9.0 / 5.0) * celcius + 32;
    }

    // declare getter method public
    public double getCelcius()
    {
        return celcius;
    }

    // declare setter method public
    public void setCelcius(double tempC)
    {
        celcius = tempC;
    tempC = (5.0 / 9.0) * (fahrenheit - 32);
    }

    public void tFah()
    {
     System.out.println ("The temperature you've inputted in Fahrenheit is " + fahrenheit + ".");
    }

    public void tCel()
    {
     System.out.println ("The temperature you've inputted in Celcius is "+ celcius + ".");
    }
}

再次尝试清理和构建项目。

既然您正在学习,我将看看是否可以帮助您。我们不能真正帮助你很多,因为我们没有完整的错误。但是,NoClassDefFoundError意味着发生了非常具体的事情。但我们需要知道它找不到什么特定的类。NoClassDefFoundError将告诉您它找不到的类

当编译Java源文件(即以.Java结尾的文件)时,Java编译器(ie javac)将编译后的版本创建为类文件(即以.class结尾的文件)。JVM(ie java)执行.class文件中的代码。编译Java文件时,需要源代码(即.Java文件)或(.class文件),以便编译器解析所有依赖项

例如,在您的程序中,CelciusAndFarenhetTester类依赖于CelciusAndFahrenheit类,因为CelciusAndFahrenheit在CelciusAndFarenhetTester的源中使用。当javac编译celciusandfarenheitester时,它需要CelciusAndFahrenheit的类文件,否则它会抱怨。在您的案例中,javac没有抱怨,这意味着它可以找到CelciusAndFarenhetTester和CelciusAndFahrenheit。这也意味着javac应该已经生成了两个类文件。一个用于CelciusAndFahrenheit,一个用于CelciusAndFarenhetTester。通常,这些文件会写入到与源文件不同的目录中。要控制这些文件的写入位置,可以在javac上设置构建路径。例如:

javac -d bin src\*.java
这将编译src目录下的每个java源文件,并将类文件写入bin目录。如果您查看bin目录,您将看到.class文件

当您得到NoClassDefFoundError时,这意味着当它编译该类时,它找到了所有依赖项。但是,当您运行它时,java找不到所需的一个或多个类文件。Java在类路径上查找类文件。如果程序找不到类,那是因为它不在类路径上。因此,如果我们想运行我在上面创建的类文件,我会执行以下操作:

java -cp bin CelciusAndFarenhetTester

-cp选项设置类路径。您可以指定任意数量的目录,将它们与您的平台使用的任何内容分开(;windows,:*/unix平台)。您只需要包含包或类文件的顶级目录。

不直接在点上,但决不使用
==
测试字符串相等性=。您如何调用此程序?您的类路径可能设置错误,或者您位于错误的目录中。本技术说明讨论了该主题:确保也添加异常跟踪,以便在运行程序时可以知道
classpath
中缺少哪个库。找不到哪个类?上次你做了什么?您用来调用程序的命令行是什么?类路径设置为什么?