#java #class #static #nested
#java #класс #статический #вложенный
Вопрос:
Это сводило меня с ума в течение последнего часа. У меня есть два компьютера, на одном из которых я работаю в основном под управлением linux mint 11 и следующей версии JDK:
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.5) (6b20-1.9.5-0ubuntu1~9.10.1)
OpenJDK Client VM (build 19.0-b09, mixed mode, sharing)
Теперь на моем компьютере с Windows я пытаюсь использовать тот же код, который я скомпилировал и запустил на linux. На Windows работает XP со следующей java:
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
Я знаю, что версии разные, но должно ли это действительно иметь значение для чего-то такого простого, как вложенный класс? Я действительно надеюсь, что я просто допустил ошибку в следующем коде:
public class test {
public static class nClass
{
public void testFunc()
{
System.out.println("Test worked.");
}
}
public static void main(String args[]) {
test.nClass t = new test.nClass();
t.testFunc();
}
}
Этот код компилируется и отлично работает на компьютере с Linux. Когда я перенесу его на Windows, он будет нормально компилироваться, но выдает:
NoClassDefFoundError test$nClass at test.main(test.java:10)
Я полностью озадачен и полностью разочарован.
Ответ №1:
Я предполагаю, что вы только скопировали test.class
файл — вам test$nClass.class
также нужно скопировать … или перекомпилировать в Windows.
(Обратите внимание, что эти имена не соответствуют соглашениям об именовании Java. Это не имеет отношения к вопросу, но рекомендуется следовать соглашениям даже для примера кода.)
Комментарии:
1. Вы, сэр, гений. Я не могу поверить, что это было так просто.