Если путь является относительным путем, то он должен работать, если ресурс изображения был скопирован вместе с файлами классов (как уже упоминалось в Itay), а папка или банка, содержащие ресурс изображения, находятся в пути к классам ( используете ли вы CLASSPATH или -cp для указания пути к классу? Если вы полагаетесь на CLASSPATH, убедитесь, что эта переменная среды правильно установлена для пользователя, выполняющего приложение)
Если это абсолютный путь, дважды проверьте, действителен ли он на целевой виртуальной машине.
так в основном, для структуры папок типа
./classes
./images
./libs
команда java -cp classes;images;libs/* my.app.Application
должна работать (java 1.6 - в более старых версиях подстановочный знак не допускается), принимая значение пути, например images/myImage.jpg
.
Еще одна мысль, разделитель пути к классам - ;
в Windows и :
в Unix. Это может быть проблемой, если вы подготовили приложение в среде Unix-типа.
Редактировать
Читаете ли вы изображение из той же библиотеки, что и настоящий файл классов? Тогда, пожалуйста, попробуйте:
this.getClass().getResourceAsStream(path)
Редактировать
ОК, это OSGi. Таким образом, есть еще несколько причин, по которым приложение работает из среды IDE затмения, но не при развертывании в виде приложения RCP. Я думаю, что это не имеет ничего общего с целевой средой.
В OSGi каждый пакет имеет свой собственный загрузчик классов, и класс из bundle1 не сможет видеть классы из bundle2, если пакеты не экспортированы должным образом. Это верно и для ресурсов. Я думаю, что изображение хранится в другой пачке. Я не знаю, какой загрузчик классов передается методу getImage, но этот загрузчик классов определенно не видит файл ресурсов.
Это может работать внутри затмения, особенно если вы добавляете проекты друг к другу в пути компоновки.
После того, как вы собрали продукт, вы сказали, что он не работает (частично) на виртуальной машине, но показывает ли этот же продукт изображение на локальном компьютере (вне затмения)?