2015-01-05 2 views
0

Я уже сталкивался с этой ошибкой, но это меня сбивает с толку, поскольку это очевидно по разным причинам, поскольку я делаю то, что я делал в прошлый раз, избегай это. Я действительно застрял на этом и совсем не уверен, что делать. Это просто класс тестера для основного класса, который у меня есть, но здесь происходит ошибка.Java «Исключение в теме» main «java.lang.NoClassDefFoundError»

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

EDIT; Не будет лгать. Я здесь. Парень, преподающий мне 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 + "."); 
    } 
} 
+1

Не прямо в точке, но ** никогда ** проверить равенство строк с '==' или '! ='. –

+1

Как вы вызываете эту программу? Ваш * classpath *, вероятно, настроен неправильно, или вы находитесь в неправильном каталоге. Эта техническая заметка посвящена этой теме: http://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html – millimoose

+0

Обязательно добавьте трассировку исключения, чтобы можно было определить, какая библиотека отсутствует в 'classpath' при запуске программы. – mystarrocks

ответ

0

Попробуйте снова очистить и построить проект.

0

Поскольку вы учитесь, я посмотрю, смогу ли я помочь вам. Мы не можем вам очень помочь, так как у нас нет полной ошибки. Но NoClassDefFoundError означает что-то очень специфическое в том, что происходит. Но нам нужно знать, какого конкретного класса он не может найти. NoClassDefFoundError сообщит вам класс, который он не может найти.

Когда вы компилируете исходный файл Java (т.е. файлы, заканчивающиеся на .java), java-компилятор (т.е. javac) создает скомпилированную версию в виде файла класса (то есть файлы, заканчивающиеся на .class). JVM (т.е. java) выполняет код в ваших .class-файлах. Когда вы компилируете файл Java, вам нужен либо исходный код (то есть .java-файл), либо файл (.class), чтобы компилятор разрешил все зависимости.

Например, в вашей программе CelciusAndFarenhetTester класс зависит от класса CelciusAndFahrenheit, потому что CelciusAndFahrenheit используется в источнике CelciusAndFarenhetTester. Когда javac компилирует CelciusAndFarenhetTester, ему нужны файлы классов для CelciusAndFahrenheit, иначе он будет жаловаться. В вашем случае javac не жалуется, что означает, что он может найти CelciusAndFarenhetTester и CelciusAndFahrenheit. Это также означает, что javac должен был создать два файла класса. Один для CelciusAndFahrenheit и один для CelciusAndFarenhetTester. Обычно они записываются в другой каталог, чем исходные файлы. Чтобы контролировать, где эти файлы записаны, вы устанавливаете путь сборки на javac. Например:

javac -d bin src\*.java 

Это будет компилировать каждый исходный файл Java в директории Src и записывать файлы классов в каталог бен. Если вы заглянули в каталог bin, вы увидите файлы .class.

Когда вы получаете NoClassDefFoundError, это означает, что когда он скомпилировал этот класс, он нашел все зависимости. Однако, когда вы запустили его, java не смог найти один или несколько файлов классов. Java ищет файлы классов в пути к классам. Если ваша программа не может найти класс, это потому, что она не находится в пути к классам. Так что, если мы хотим, чтобы запустить файлы классов я создал выше, я хотел бы сделать следующее:

java -cp bin CelciusAndFarenhetTester 

-cp опция устанавливает путь к классам. Вы можете указать любое количество каталогов, разделяющих их независимо от используемой платформы (; windows,: */unix платформ). Вам нужен только каталог верхнего уровня, содержащий пакеты или файлы классов.

Смежные вопросы