bien, esto me ha mordido también.
me construyeron un frasco ejecutable con entrada de manifiesto
SplashScreen-Image: MyGraphic.jpg
y funciona como se supone que debe.
De Eclipse, especificando el VM arg como
-splash:MyGraphic.jpg
no tan suerte
SplashScreen.getSplashScreen() devuelve un valor nulo.
La razón de esto es la implementación de muerte cerebral de SplashScreen.getSplashScreen() en el JDK (al menos 1.6). Creo. Es algo difícil de decir sin entrar en lo que está haciendo el código nativo. Pero, aquí está este método de java.awt.SplashScreen.No estoy seguro de si se llama, pero su estudio no me proporcione la clave esencial que necesitaba para conseguir este trabajo en 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;
}
Tenga en cuenta que en el caso de un archivo (es decir, la línea de comandos en lugar de jarra lanzamiento) no está haciendo un getResource() para obtener el URL pero abriendo un archivo relativo al CWD. Dado que Eclipse ejecuta las configuraciones predeterminadas para ejecutarse desde la raíz del proyecto, la respuesta es especificar la ruta como una ruta relativa y no esperar una búsqueda de ruta de clase.
Por lo tanto, desde que estoy construyendo con maven, mi imagen se encuentra en src/main/resources/MyGraphic.jpg. La especificación de esta como el parámetro de línea de comandos: es decir
-splash:src/main/resources/MyGraphic.jpg
le permite trabajar en Eclipse (o, supongo, cualquier línea de comandos)
No estoy seguro de por qué esto es, ya que el método es getImageURL NO llamado por getSplashScreen() pero SI FUNCIONA.
Para mí esto es una especie de muerte cerebral por parte de Sun/Oracle. Podrían haber hecho fácilmente una búsqueda de classpath con algo como imageURL = getResource (filename) pero no lo hicieron.
La respuesta corta es que la sintaxis de la línea de comando de la pantalla de bienvenida hace referencia a un nombre de archivo relativo al directorio de trabajo actual, no relativo a la ruta de clase.
Ha intentado _VM Arguments_ en su _Run Configuration_? – trashgod
Sí, he intentado pasar los argumentos desde allí. Parece que el problema radica en que el argumento -splash: image depende de un archivo ubicado dentro del mismo directorio y estoy tratando de incluir la imagen dentro del archivo Jar. – will824
Lo siento, lo leí mal. También puede probar esta [utilidad] (http://sites.google.com/site/drjohnbmatthews/manifesto) para verificar el atributo 'SplashScreen-Image' _in situ_. – trashgod