ОК, меня это тоже укусило.
Я построил работающую банку
с декларацией
SplashScreen-Image: MyGraphic.jpg
и работает как положено.
Из Eclipse, указав аргумент виртуальной машины как
-splash:MyGraphic.jpg
нет такой удачи
SplashScreen.getSplashScreen () возвращает ноль.
Причиной этого является мертвая реализация SplashScreen.getSplashScreen () в JDK (как минимум 1.6). Я думаю. Трудно сказать, не вдаваясь в то, что делает нативный код. Но вот этот метод из java.awt.SplashScreen. Я не уверен, называется ли он, но изучение его дало мне необходимую подсказку, необходимую для работы в Eclipse:
public synchronized URL getImageURL() throws IllegalStateException {
checkVisible();
if (imageURL == null) {
try {
String fileName = _getImageFileName(splashPtr);
String jarName = _getImageJarName(splashPtr);
if (fileName != null) {
if (jarName != null) {
imageURL = new URL("jar:"+(new File(jarName).toURL().toString())+"!/"+fileName);
} else {
imageURL = new File(fileName).toURL();
}
}
}
catch(java.net.MalformedURLException e) {
// we'll just return null in this case
}
}
return imageURL;
}
Обратите внимание, что в случае файла (то есть командной строки, а не запуска jar) он не выполняет getResource () для получения URL-адреса, а открывает файл относительно CWD. Поскольку конфигурации запуска Eclipse по умолчанию запускаются из корня проекта, ответ заключается в том, чтобы указать путь как относительный путь, а не ожидать поиска пути к классам.
Поэтому, так как я строю с maven, мое изображение находится в src / main / resources / MyGraphic.jpg. Указав это в качестве параметра командной строки: т.е.
-splash:src/main/resources/MyGraphic.jpg
позволяет ему работать в Eclipse (или, я думаю, в любой командной строке)
Я не уверен, ПОЧЕМУ это так, поскольку метод getImageURL НЕ вызывается getSplashScreen (), но он РАБОТАЕТ.
Для меня это своего рода умопомрачительное со стороны Солнца / Оракула. Они могли бы легко сделать поиск classpath с чем-то вроде
imageURL = getResource (имя файла), но они этого не сделали.
Краткий ответ: синтаксис командной строки Splash Screen относится к имени файла относительно текущей рабочей директории, а не относительно пути к классам.