Я думаю, что вы в основном напичканы.
Да, (по крайней мере, в теории) можно заблокировать вызов System.exit()
через менеджер безопасности.Но что происходит потом?
- Статический инициализатор в классе пытается вызвать
System.exit()
. - SecurityManager говорит, что вы не можете, и выдает исключение SecurityException
- Статическая инициализацияСбой класса с неперехваченным исключением
- Сбой инициализации класса, который вы первоначально пытались инициализировать (неявно).
Теоретически вы можете поймать исключение.Но это не очень далеко, потому что JVM только попытается выполнить статическую инициализацию один раз.Если это не удается, и вы пытаетесь снова, JVM просто выдаст ClassNotFoundError
(я думаю), повторяя исходное исключение как причину.
Единственный способ заставить инициализацию класса повториться, это1022 * выбросить загрузчик классов, который первым загрузил нарушающие классы, создать новый и снова начать загрузку.И тогда вы вернетесь к исходной проблеме.
Итог: если вы действительно не можете изменить код, вы набиты.
Даже если бы вы могли сделать эту работу,это звучит как плохое решение / не решение вашей проблемы.Исключение LinkageError означает, что библиотеке не удалось загрузить собственную библиотеку, и что соответствующие вызовы метода native
в библиотеку завершатся с Error
.В лучшем случае вы получите библиотеку, в которой некоторые биты работают, а другие нет.
Вам следует сосредоточиться на получении правильной собственной библиотеки для вашей платформы и / или настройке JVM, чтобы она могла ее найти.,Или найти лучшую альтернативу сторонней библиотеке, которая не обременена навязчивой ерундой принудительного применения лицензий.