Почему этот статический вложенный класс не работает в Java на одном компьютере? - PullRequest
0 голосов
/ 22 октября 2011

Это сводило меня с ума в течение последнего часа. У меня есть два компьютера, один из которых я работаю в основном под управлением 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 Ответ

6 голосов
/ 22 октября 2011

Я предполагаю, что вы скопировали только файл test.class - вам также нужно скопировать test$nClass.class ... или перекомпилировать в Windows.

(Обратите внимание, что эти имена не соответствуют соглашениям об именах Java. Это не относится к вопросу, но рекомендуется следовать соглашениям даже для примера кода.)

...