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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top