Elettracompany.com

Компьютерный справочник
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Error java lang illegalargumentexception

Ошибка java.lang.nullpointerexception, как исправить?

Ряд пользователей (да и разработчиков) программных продуктов на языке Java могут столкнуться с ошибкой java.lang.nullpointerexception (сокращённо NPE), при возникновении которой запущенная программа прекращает свою работу. Обычно это связано с некорректно написанным телом какой-либо программы на Java, требуя от разработчиков соответствующих действий для исправления проблемы. В этом материале я расскажу, что это за ошибка, какова её специфика, а также поясню, как исправить ошибку java.lang.nullpointerexception.

Скриншот ошибки NPE

Что это за ошибка java.lang.nullpointerexception

Появление данной ошибки знаменует собой ситуацию, при которой разработчик программы пытается вызвать метод по нулевой ссылке на объект. В тексте сообщения об ошибке система обычно указывает stack trace и номер строки, в которой возникла ошибка, по которым проблему будет легко отследить.

Что в отношении обычных пользователей, то появление ошибки java.lang.nullpointerexception у вас на ПК сигнализирует, что у вас что-то не так с функционалом пакетом Java на вашем компьютере, или что программа (или онлайн-приложение), работающие на Java, функционируют не совсем корректно. Если у вас возникает проблема, при которой Java апплет не загружен, рекомендую изучить материал по ссылке.

Ошибка Java

Как исправить ошибку java.lang.nullpointerexception

Как избавиться от ошибки java.lang.nullpointerexception? Способы борьбы с проблемой можно разделить на две основные группы – для пользователей и для разработчиков.

Для пользователей

Если вы встретились с данной ошибкой во время запуска (или работы) какой-либо программы (особенно это касается java.lang.nullpointerexception minecraft), то рекомендую выполнить следующее:

  1. Переустановите пакет Java на своём компьютере. Скачать пакет можно, к примеру, вот отсюда;
  2. Переустановите саму проблемную программу (или удалите проблемное обновление, если ошибка начала появляться после такового);
  3. Напишите письмо в техническую поддержку программы (или ресурса) с подробным описанием проблемы и ждите ответа, возможно, разработчики скоро пофиксят баг.
  4. Также, в случае проблем в работе игры Майнкрафт, некоторым пользователям помогло создание новой учётной записи с административными правами, и запуск игры от её имени.

Java ошибка в Майнкрафт

Для разработчиков

Разработчикам стоит обратить внимание на следующее:

  1. Вызывайте методы equals(), а также equalsIgnoreCase() в известной строке литерала, и избегайте вызова данных методов у неизвестного объекта;
  2. Вместо toString() используйте valueOf() в ситуации, когда результат равнозначен;
  3. Применяйте null-безопасные библиотеки и методы;
  4. Старайтесь избегать возвращения null из метода, лучше возвращайте пустую коллекцию;
  5. Применяйте аннотации @Nullable и @NotNull;
  6. Не нужно лишней автоупаковки и автораспаковки в создаваемом вами коде, что приводит к созданию ненужных временных объектов;
  7. Регламентируйте границы на уровне СУБД;
  8. Правильно объявляйте соглашения о кодировании и выполняйте их.

Как исправить ошибку java.lang.nullpointerexception?

В этом посте я покажу наглядный пример того, как исправить ошибку исключения Null Pointer (java.lang.nullpointerexception). В Java особое значение null может быть назначено для ссылки на объект и означает, что объект в данный момент указывает неизвестную область данных.

NullPointerException появляется, если программа обращается или получает доступ к объекту, а ссылка на него равна нулю (null).

Это исключение возникает следующих случаях:

  • Вызов метода из объекта значения null.
  • Доступ или изменение объекта поля null.
  • Принимает длину null(если бы это был массив Java).
  • Доступ или изменение ячеек объекта null.
  • Показывает «0», значение Throwable.
  • При попытке синхронизации по нулевому объекту.

NullPointerException является RuntimeException, и, таким образом, компилятор Javac не заставляет вас использовать блок try-catch для соответствующей обработки.

Зачем нам нужно значение null?

Как уже упоминалось, null — это специальное значение, используемое в Java. Это чрезвычайно полезно при кодировании некоторых шаблонов проектирования, таких как Null Object pattern и шаблон Singleton pattern.

Шаблон Singleton обеспечивает создание только одного экземпляра класса, а также направлен на предоставление глобального доступа к объекту.

Например, простой способ создания не более одного экземпляра класса — объявить все его конструкторы как частные, а затем создать открытый метод, который возвращает уникальный экземпляр класса:

В этом примере мы объявляем статический экземпляр класса Singleton. Этот экземпляр инициализируется не более одного раза внутри метода getInstance.

Обратите внимание на использование нулевого значения, которое разрешает создание уникального экземпляра.

Как избежать исключения Null Pointer

Чтобы решить и избежать исключения NullPointerException, убедитесь, что все ваши объекты инициализированы должным образом, прежде чем использовать их.

Когда вы объявляете ссылочную переменную, вы должны создать указатель на объект и убедиться, что указатель не является нулевым, прежде чем запрашивать метод или поле у ​​объекта.

Кроме того, если выдается исключение, используйте информацию, находящуюся в трассировке стека исключения. Трассировка стека выполнения обеспечивается JVM, чтобы включить отладку. Найдите метод и строку, в которой было обнаружено исключение, а затем выясните, какая ссылка равна нулю в этой конкретной строке.

Опишем некоторые методы, которые имеют дело с вышеупомянутым исключением. Однако они не устраняют проблему, и программист всегда должен быть осторожен.

  1. Сравнение строк с литералами

Очень распространенный случай, выполнения программы включает сравнение между строковой переменной и литералом. Литерал может быть строкой или элементом Enum.

Вместо того, чтобы вызывать метод из нулевого объекта, рассмотрите возможность вызова его из литерала. Например:

Приведенный выше фрагмент кода вызовет исключение NullPointerException. Однако, если мы вызываем метод из литерала, поток выполнения продолжается нормально:

  1. Проверка аргументов метода

Перед выполнением вашего собственного метода обязательно проверьте его аргументы на наличие нулевых значений.

В противном случае вы можете вызвать исключение IllegalArgumentException.

  1. Предпочтение метода String.valueOf() вместо of toString()

Когда код вашей программы требует строковое представление объекта, избегайте использования метода toString объекта. Если ссылка вашего объекта равна нулю, генерируется исключение NullPointerException.

Вместо этого рассмотрите возможность использования статического метода String.valueOf, который не выдает никаких исключений и «ноль», если аргумент функции равен нулю.

  1. Используйте Ternary Operator

Ternary Operator — может быть очень полезным. Оператор имеет вид:

boolean expression ? value1 : value2;

Сначала вычисляется логическое выражение. Если выражение true, то возвращается значение1, в противном случае возвращается значение2. Мы можем использовать Ternary Operator для обработки нулевых указателей следующим образом:

Читать еще:  Parsedouble java описание

String message = (str == null) ? «» : str.substring(0, 10);

Переменная message будет пустой, если ссылка str равна нулю. В противном случае, если str указывает на фактические данные, в сообщении будут первые 10 символов.

  1. создайте методы, которые возвращают пустые коллекции вместо нуля.

Очень хорошая техника — создавать методы, которые возвращают пустую коллекцию вместо нулевого значения. Код вашего приложения может перебирать пустую коллекцию и использовать ее методы и поля. Например:

  1. Воспользуйтесь классом Apache’s StringUtils.

Apache’s Commons Lang – это библиотека, которая предоставляет вспомогательные утилиты для API java.lang, такие как методы манипулирования строками.

Примером класса, который обеспечивает манипулирование String, является StringUtils.java, который спокойно обрабатывает входные строки с нулевым значением.

Вы можете воспользоваться методами: StringUtils.isNotEmpty, StringUtils.IsEmpty и StringUtils.equals, чтобы избежать NullPointerException. Например:

  1. Используйте методы: contains(), containsKey(), containsValue()

Если в коде вашего приложения используется Maps, рассмотрите возможность использования методов contains, containsKey и containsValue. Например, получить значение определенного ключа после того, как вы проверили его существование на карте:

System.out.println(value.toString()); // В приведенном выше фрагменте мы не проверяем, существует ли на самом деле ключ внутри карты, и поэтому возвращаемое значение может быть нулевым. Самый безопасный способ следующий:

  1. Проверьте возвращаемое значение внешних методов

На практике очень часто используются внешние библиотеки. Эти библиотеки содержат методы, которые возвращают ссылку. Убедитесь, что возвращаемая ссылка не пуста.

Утверждения очень полезны при тестировании вашего кода и могут использоваться, чтобы избежать выполнения фрагментов кода. Утверждения Java реализуются с помощью ключевого слова assert и выдают AssertionError.

Обратите внимание, что вы должны включить флажок подтверждения JVM, выполнив его с аргументом -ea. В противном случае утверждения будут полностью проигнорированы.

Примером использования утверждений Java является такая версия кода:

Если вы выполните приведенный выше фрагмент кода и передадите пустой аргумент getLength, появится следующее сообщение об ошибке:
Exception in thread «main» java.lang.AssertionError
Также вы можете использовать класс Assert предоставленный средой тестирования jUnit.

Модульные тесты могут быть чрезвычайно полезны при тестировании функциональности и правильности вашего кода. Уделите некоторое время написанию пары тестовых примеров, которые подтверждают, что исключение NullPointerException не возникает.

Существующие безопасные методы NullPointerException

Доступ к статическим членам или методам класса

Когда ваш вы пытаетесь получить доступ к статической переменной или методу класса, даже если ссылка на объект равна нулю, JVM не выдает исключение.

Это связано с тем, что компилятор Java хранит статические методы и поля в специальном месте во время процедуры компиляции. Статические поля и методы связаны не с объектами, а с именем класса.

Несмотря на тот факт, что экземпляр SampleClass равен нулю, метод будет выполнен правильно. Однако, когда речь идет о статических методах или полях, лучше обращаться к ним статическим способом, например, SampleClass.printMessage ().

Оператор instanceof

Оператор instanceof может использоваться, даже если ссылка на объект равна нулю.

Оператор instanceof возвращает false, когда ссылка равна нулю.

В результате, как и ожидалось:

Not an instance of the String class!

Смотрите видео, чтобы стало понятнее.

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Ошибка java.lang.IllegalArgumentException: Unable to load native library. libProject1.so

Вопросы

krapotkin 863

krapotkin 863

  • Продвинутый пользователь
  • Пользователи
  • 863
  • 1 748 сообщений
  • Город Екатеринбург

В процессе разработки столкнулся с очень странной ситуацией, корни которой до сих пор неясны, но решение нашлось.

Итак. Делфи 10.3.3. Чистое приложение — пустая форма и кнопка. Отлично работает на разных устройствах кроме Samsung Galaxy Tab A (2016). Android 5.1.1

Программа падает, не успев даже загрузиться. Любая. При этом она же, скомпилированная на другом компе, запускается нормально. И даже после изменения SDK/NDK на нем, ничего не падает.

LogCat дает крайне странную картину

java.lang.IllegalArgumentException: Unable to load native library: /data/app-lib/com.embarcadero.Project1-1/libProject1.so

Начинаем экспериментировать с SDK, NDK и т.д. Поставил также хотфиксы для 10.3.3.

Сразу скажу, SDK/NDK ставились отдельно через Android studio, не скачивались вместе с Delphi. Не торопитесь бросать чтение на этом месте!)) На другом компе, где все работает, все ставилось точно так же.

Короче, очень много комбинаций версий SDK/NDK проверено.

Результат такой. При постепенном понижении версии NDK все взлетело при NDK v22.

При этом версия SDK видимо такого большого влияния не имеет, потому что этот вариант нормально работает

Повторюсь. На других устройствах все работало и на более новых Ndk. Xiaomi Mi Pad4 , Samsung Galaxy Tab A (2019), Xiaomi Redmi 5 и 5Plus

Спасибо за участие и помощь в разборе завалов @Andrey Efimov

Отредактировал 26 декабря, 2019 krapotkin

Поделиться сообщением

Ссылка на сообщение
Поделиться на другие сайты

1 ответ на этот вопрос

Рекомендуемые сообщения

Присоединяйтесь к обсуждению

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

Похожий контент

поделитесь пожалуйста пустым проектом, готовым к публикации для TV устройств.
что-то никак не получается опубликовать, сейчас отклонили с такими ошибками:
APK:8
No Now Playing notification [card]»
Your App does not contain a “Now Playing” notification [card] for when the user has selected the HOME button within the app. Please refer to our Displaying a Now Playing Card documentation for more details.
APK:8
Play/Pause key event is not respected during playback
Your media apps that play video or music content must respect the play/pause key during playback. Please refer to our Media Play/Pause documentation and Update the Playback State documentation for details.
Missing DPad functionality
Your app requires user interaction for menus or app navigation. Please make sure that all menus and app navigation are fully functional using a DPad. Please refer to our DPAD Control and Hardware Declaration documentation.
ну и баннер не прилепил
No full-size app banner
Your app does not contain a full-size app banner or is it not visible in the launcher. We are targeting 1080P, which we consider xhdpi. Apps should include the banner in the xhdpi (320 dpi) drawables folder with a size of (320px × 180px). Please refer to our Home Screen Banner and UI Patterns documentation.
The title should help users identify apps in the launcher. Please refer to our Visual Design and User Interaction documentation for more information.
был бы очень благодарен за рабочий пустой костяк с манифестом.

Читать еще:  Java net connect exception

в манифест и свой файл file_paths.xml (или как вам его советуют назвать в интернетах) в деплой.
Теперь все это делается хоть несколько странно и однобоко, но автоматически, путем установки галочки Secure File Sharing

после этого в манифесте автоматически пропишется один из вариантов размещения файлов, которые вы можете найти в интернете. Используется алиас external-path
файл, показанный на рисунке, создается автоматически самой делфи.

теперь остается отгадать, какой путь реально подставится вместо «.»
Как показала практика, все пути выглядят не так, как кажется, если исходить из простого здравого смысла. Целый день использования GetHomeDir и других полезных методов TPath завел меня совсем в тупик.
Оказалось все проще (?)
st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; . OutputDir := TAndroidHelper.Context.getExternalCacheDir(); path := JStringToString(OutputDir.getAbsolutePath); filename := path+’/ASDroid2.apk’; ApkFile := TJfile.JavaClass.init( StringToJstring(filename)); FApkUri := TAndroidHelper.JFileToJURI(ApkFile); st.Position := 0; st.SaveToFile(filename); обратите внимание, в provider_paths мы задаем external-paths, а в коде ищем ExternalCacheDir. (For.Unbelievably.Creative.Knowers!)
Потом все просто. FApkUri передаем в интент и запускаем
итоговый код примерно таков. (скачивание в потоке с использованием небольшого собственного API, но там ничего важного, можно не обращать внимания)
procedure TasdSettingsFrame.bDownloadClick(Sender: TObject); begin <$IFDEF ANDROID>bDownload.Enabled := False; DownloadAndRun(); <$ENDIF>end; <$IFDEF ANDROID>procedure TasdSettingsFrame.DownloadAndRun(); begin ttask.Run(procedure var aapi:TasdAPI; st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; begin st := TMemoryStream.Create; aapi := TasdAPI.Clone(_API); try aapi.OnReceiveData := OnReceiveData; aapi.getApk(st); if aapi.Err.Code=0 then begin OutputDir := TAndroidHelper.Context.getExternalCacheDir(); path := JStringToString(OutputDir.getAbsolutePath); filename := path+’/ASDroid2.apk’; ApkFile := TJfile.JavaClass.init( StringToJstring(filename)); FApkUri := TAndroidHelper.JFileToJURI(ApkFile); st.Position := 0; st.SaveToFile(filename); TThread.Synchronize(nil,procedure begin bDownload.Enabled := true; StartActivity(FApkUri); end); end; finally st.Free; aapi.Free; end; end); end; procedure StartActivity(ApkUri: Jnet_Uri); var Intent: JIntent; begin Intent := TJIntent.Create(); Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP or TJIntent.JavaClass.FLAG_GRANT_WRITE_URI_PERMISSION or TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION); Intent.setDataAndType(apkuri, StringToJString(‘application/vnd.android.package-archive’)); TAndroidHelper.Activity.startActivity(Intent); end; procedure TasdSettingsFrame.OnReceiveData(const Sender: TObject; AContentLength: Int64; AReadCount: Int64; var Abort: Boolean); begin tthread.Synchronize(nil, procedure begin pb1.Max := AContentLength; pb1.Value := AReadCount; end); end; <$ENDIF>Вопросы остались конечно, почему так странно с каталогами, но выяснять пока нет желания. Работает — не трожь.
Всем удачи.
UPD.
Для того, чтобы системный инсталлер запускался, нужно не забыть отметить еще одну галочку

Приветствую. На просторах интернета нашел BASS-библиотеку для Android и соответственно обертку для нее под Delphi.

Вроде бы все работает нормально, но вот при настройке библиотеки при помощи методов
BASS_GetConfigPtr, BASS_SetConfigPtr для работы со строковыми параметрами возникает проблема.
На Windows с этим я легко работал, там достаточно использовать такую конструкцию

PAnsiChar(BASS_GetConfigPtr(configId)) и получаем значение. BASS_SetConfigPtr(configId, PAnsiChar(value)) и задаем значение. Но вот под Android такой способ не проходит, как минимум по одной причине — он не понимает, что такое PAnsiChar. На docwiki.emarcadero.com, есть вот такая статейка. В которой написано, что PAnsiChar нужно заменить одним из трех: System.String, System.MarshalledString или System.SysUtils.TStringBuiler
Только вот, если использовать MarshalledString, то при попытке получить значение приложение просто намертво зависает и все.
Потом я подумал, так как библиотека написана на Java (вероятно), то может стоит попробовать использовать JNI в работе с ней, так как в Java файле, который прилагался вместе с библиотекой. Там я нашел объявления этих функций и заметил, что тип возвращаемого значения Object (ну, не зная Java я просто предположил, что это тоже просто ссылка на значение, например как PAnsiChar в Delphi на Windows).

Но, при попытке как-либо использовать это натыкаюсь на проблемы в виде ошибки компиляции, либо очередном зависании приложения.
Так как возвращается Object, то решил попробовать вариант с JObject и JString, но ни один вариант не хочет работать, опять ошибки на стадии компиляции, либо зависание приложение. Может быть, я что-то не так делаю.

В общем, буду признателен за помощь!

Ошибка: java.lang.IllegalArgumentException

Ошибка в следующем коде: java.lang.IllegalArgumentException: adding container’s parent to itself.

3 Ответа

Вы не можете добавить label в label :-

Альдо вы не можете добавить button на button :-

Попробуйте добавить их в JPanel или ContentPane вместо этого, как :-

EDIT:-

Для отображения JFrame вам нужно сначала добавить свой JPanel в JFrame , а затем установить видимость JFrame в true что-то вроде :-

Также не устанавливайте макет на null :-

В противном случае вам нужно будет установить границы самостоятельно. Так что просто прокомментируйте эту строку.

попробуйте запустить этот example.there-это куча проблем в вашем коде.

вы добавляете компонент к себе

использование макетов не .don использования null

IllegalArgumentException -это непроверенное исключение.

Он явно поднимается разработчиком API или программистом, чтобы указать, что метод был вызван с незаконным аргументом.

Допустимый диапазон приоритета потока составляет от 1 до 10, если мы попытаемся установить приоритет с любым другим значением, то получим IllegalArgumentException.

Похожие вопросы:

Я только вчера узнал, как использовать потоки, и я пытаюсь кодировать некоторые изображения с помощью потоков, но я получу эту ошибку java.lang.IllegalArgumentException: им == null! Я попытался.

Я получил эту ошибку из журналов пользователей в приложении android, которое я создал. До сих пор мне не удалось воспроизвести эту ошибку. Любая помощь была бы чрезвычайно признательна. Ошибка.

Я сохраняю текущую дату в SQLite db, используя переменную CURRENT_DATE. Я обнаружил, что используемый формат даты- yyyy-mm-dd в том же самом. Я хочу разобрать дату в коде, но я получаю эту ошибку.

Читать еще:  Maven версия java

Я пытаюсь преобразовать строку даты json в дату для хранения в базе данных SQLite . После запуска приложения происходит сбой через некоторое время и получение ошибки вызвано.

Ошибка: 2018-12-06 18:18:34.601 WARN 2304 — [nio-8080-exec-8] .m.m.a.ExceptionHandlerExceptionResolver : Resolved exception caused by handler execution.

Я опубликовал свое заявление на android market. Я получил ошибку на своей домашней странице. Кто-то написал crash error. Но это приложение отлично работает в моем реальном устройстве. Я также.

Я пытаюсь запустить ALS из PySpark . Я скопировал & вставил пример кода, указанный в ссылке. Однако в строке возникает ошибка java.lang.IllegalArgumentException : model = ALS.train(ratings.

я хочу получить данные по использованию Интернета Retrofit библиотека мой код выглядит так : @GET(?key=&q=) Call
> getTheData(@Query(key) String key.

URL Ссылка: http://www.factsplanet.info/cities.php Метод Retrofit Ошибка: java.lang.IllegalArgumentException основной класс public class MainActivity extends AppCompatActivity < Retrofit retrofit;.

Getting the following exception while starting jboss server from eclipse > ERROR [AbstractKernelController] Error installing to Instantiated: name=StandardBindings state=Described.

What does the error «java.lang.IllegalArgumentException: URI i s not hierarchical» mean?

I have an java application, that is decoding information on a image using an xml file. The xml file is in the top most package. This is the code I am using to get the file

The code is working fine when running in eclipse. When I am creating the jar, and pressing the decode button to perform the decoding, this is error:

jar:file:/C:/simple3.jar!/text.xml Exception in thread «AWT-EventQueue-0 » java.lang.IllegalArgumentException: URI is not hierarchical at java.io.File.(Unknown Source) at com.simplediptool.DecodeButton1.actionPerformed(DecodeButton1.java:70)

where I am going wrong?

Создан 11 мар. 15 2015-03-11 18:36:53 JavaNewbie

You appear to be running this on windows. Try replacing the unix file seperators «/» with the Windows file seperator «». – Davis Broda 11 мар. 15 2015-03-11 18:38:53

It’s working fine in Eclipse because in Eclipse your classes and resources reside in the native file system. When packed into a jar, the resources are no ordinary files, hence you can’t convert their URL (a ‘jar:’ URL as seen in the exception’s message) into a ‘File’ object— they aren’t files. – Holger 11 мар. 15 2015-03-11 18:41:12

But it that case, it wont even compile in eclipse @DavisBroda – JavaNewbie 11 мар. 15 2015-03-11 18:41:43

@Holger: how to resolve it then? – JavaNewbie 11 мар. 15 2015-03-11 18:42:56

There is no way to create a ‘File’ object for something that isn’t a file. But that’s an “XY problem”; the question is why you think you need a ‘File’, in other words, what’s your *actual* problem. – Holger 11 мар. 15 2015-03-11 18:44:51

@Holger: I am trying to create a file object process_file. There are different functions that requires the a file object be passed. – JavaNewbie 11 мар. 15 2015-03-11 19:29:09

As said, you don’t have a file. So you have to replace these “different functions that requires the a file object be passed” by functions which do not require ‘File’ objects. There are different abstractions, e.g. ‘InputStream’, however, as long as you don’t name these functions, we can’t help you finding the appropriate replacements. – Holger 11 мар. 15 2015-03-11 19:31:50

@Holger: Thank you . I have to work with some existing code to do the decoding. They have been created by some other developer and I cannot change it. So that is the constrainst. – JavaNewbie 11 мар. 15 2015-03-11 19:49:14

The last resort is to copy the contents of the resource to a temporary file, however, that’s really rarely necessary. Often, the alternatives are simply overlooked. – Holger 11 мар. 15 2015-03-11 20:01:56

1 ответ

Instead of using

JAR file is a united file with many resources inside it, just like a ZIP or WAR file. To access a single resource, you need to treat it as a stream, hence use the above. On the other hand in eclipse, the files can be accessed directly as a resource, hence it works.

This shall solve your problem.

Создан 11 мар. 15 2015-03-11 19:06:29 Iqbal

Using ‘getResourceAsStream(…)’, which is just a shorthand for ‘getResource(…).openStream()’, will solve the problem *if* an ‘InputStream’ is desired. At the moment we simply don’t know what the OP wants to do with the file. E.g. if the resource ought to be passed to an XML parser, passing the ‘URL’ directly to the parser is preferred as that tells the parser how to resolve relative links and helps providing better error messages if something goes wrong. – Holger 11 мар. 15 2015-03-11 19:20:31

Holger, you seem to be getting the question wrong. Here the question is the code compiles and runs successfully in eclipse, but after creating a JAR throws the said exception. This clearly states that the resource is not accessible and basic thumb rule is in any JAR file if you want to access a resource, treat it as a stream. It shall definitely work. – Iqbal 11 мар. 15 2015-03-11 19:28:37

I know exactly what the question is. Is is *not* asking for a “basic thumb rule”. A stream *can* solve the problem, but not in every case. That simply depends on the operation. E.g. you can’t write into the resource that way and you can’t list the siblings of the resource that way. – Holger 11 мар. 15 2015-03-11 19:34:40

@Iqbal: thank you. But I need to create a file object. Using a getResourceAs stream i am getting an inputstream object. – JavaNewbie 11 мар. 15 2015-03-11 19:40:11

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector
×
×