Почему этот статический вложенный класс не работает в Java на одном компьютере?

#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. Вы, сэр, гений. Я не могу поверить, что это было так просто.