Игнорировать исключения при выполнении байт-кода (Java)? - PullRequest
0 голосов
/ 01 сентября 2011

У меня есть большая программа, которую я изменил в Java. Для компиляции я использовал IDE IntelliJ idea (Community Edition). Когда я запускаю программу, она запускает графический интерфейс, а затем продолжает делать все, что я от нее хочу, с очень небольшим количеством проблем (из которых не связаны с исключениями). Но код всегда генерирует класс не найденных исключений (даже исходный немодифицированный код делает это, как только вы извлекаете его из файла .jar. Несмотря на эти ошибки, он отлично выполняется в среде IDE, но при этом замечает ошибки, но они не появляются чтобы иметь влияние на программу.Однако, когда я выполняю их из виртуальной машины (с именем файла Java), исключения, которые обычно игнорируются, препятствуют окончательному выполнению программы. Ошибки точно такие же, как и те, что iDE показывает, но IDE игнорирует их! Как я могу заставить виртуальную машину игнорировать ошибки и выполнить программу (есть ли возможность перейти на java - например, java -ignoreerrors filename).

Возможно ли это, или мне придется изменить код?

Ответы [ 3 ]

0 голосов
/ 01 сентября 2011

Если у вас возникли проблемы с ClassNotFoundException s, вы всегда можете локализовать проблему и отловить и записать ее, используя try { ... } catch (...) { ... }.

Если вместо этого вы получаете ClassNotFoundError s, то это не локализуемая проблема с отражением, а сбой при инициализации необходимого кода. Вы должны попытаться удалить ненужные зависимости, но вы действительно не должны использовать классы, которые не инициализированы должным образом.

Если вам абсолютно необходимо, вы всегда можете загрузить свою программу, используя custom ClassLoader, которая генерирует фиктивные пустые классы для любого имени, которое не разрешается с помощью системного загрузчика классов, и используйте его для загрузки основного учебный класс. Это до некоторой степени будет повторять то, что делает ваша IDE, хотя ваша IDE, вероятно, делает дополнительный шаг, чтобы убедиться, что частично определенные классы имеют правильный интерфейс, даже если некоторые методы заглушены, потому что их тела не компилируются.

0 голосов
/ 01 сентября 2011
  1. Вы можете игнорировать только предупреждения компилятора. Вы не можете игнорировать ошибки.
  2. Ошибки, которые показывает IntelliJ, происходят от одного и того же компилятора.
  3. ClassNotFoundException будет означать, что вашему коду не удалось динамически загрузить класс во время выполнения.
  4. Это может означать, что в вашем classpath отсутствует необходимая зависимость (jar). Попробуйте обратиться к документации по коду и убедитесь, что вы разрешили все зависимости во время выполнения. Также убедитесь, что зависимые файлы находятся в пути к классам, иначе среда выполнения не сможет их найти.
0 голосов
/ 01 сентября 2011

Невозможно игнорировать ClassNotFoundExceptions, если этот класс на самом деле не нужен коду. Некоторые платформы делают это, пытаясь загрузить класс, чтобы определить, доступна ли какая-либо функция. Однако, если CNFE препятствует запуску вашего приложения, вам просто нужно это исправить. Если вы показываете некоторые следы стека, кто-то может направить вас в правильном направлении.

...