Java Image fa un casino quando eseguo il file .jnlp
Domanda
Ho un metodo che viene chiamato all'inizio del mio programma e funziona benissimo quando eseguo il jar, ma quando eseguo il file jnlp si arresta in modo anomalo.
public void newImg(String i)
{
try
{
File file = new File(i);
img = ImageIO.read(file);
}
}
img è un bufferedImage, comunque.
Soluzione
Le probabilità sono il percorso che stai dando al file o le autorizzazioni non corrispondono. Inserisci il File ctor in un blocco try, rileva l'eccezione e scopri di cosa si tratta.
Dovrebbe assomigliare a questo:
try {
File file = new File(i);
img = ImageIO.read(file);
} catch (Exception ex) {
// You probably want to open the java console, or use a logger
// as a JNLP may send stderr someplace weird.
Systemm.err.println("Exception was: ", ex.toString());
}
Il codice che hai non fa nulla con l'eccezione.
Potresti dare un'occhiata al thread delle eccezioni in il tutorial Java.
update
Vedi i miei commenti. Ho appena provato qualcosa e confermato quello che stavo pensando: il codice con un try {}
e nessun catch
o finalmente
non si compila nemmeno. se questo è davvero il codice con cui pensi di lavorare, probabilmente hai caricato un vecchio file di classe; questo non è stato compilato.
$ cat Foo.java
public class Foo {
public void tryit() {
try {
File f = new File(null);
}
}
}
$ javac Foo.java
Foo.java:3: 'try' without 'catch' or 'finally'
try {
^
1 error
$
Altri suggerimenti
Forse non stai caricando correttamente l'immagine. Non utilizzare la posizione relativa del file. Questo sarà diverso per ciascun sistema operativo. La tua immagine nel JAR dovrebbe essere caricata correttamente in questo modo:
URL url = this.getClass().getResource("image.jpg");
Image img = Toolkit.getDefaultToolkit().getImage(url);
Questo caricherà un file chiamato image.jpg che si trova nella stessa posizione della classe. Puoi anche usare cose come File.pathSeparator se si trova in un'altra posizione.
Utilizza uno di questi due metodi per caricarlo come risorsa:
http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getResource(java.lang.String) http://java.sun.com/javase/6/docs /api/java/lang/Class.html#getResourceAsStream(java.lang.String)
Assicurati di avere il nome file / percorso corretti.
Assicurati di avere accesso ai file nel file system.