2013-05-17 9 views
8

Ciao Sto cercando di salvare un file da un'applicazione Java Webstart.JNLP FileSaveService apre una finestra di dialogo di apertura file

public class Main { 
    public static void main(String[] args) { 
     try { 
     FileSaveService fos = (FileSaveService) ServiceManager.lookup("javax.jnlp.FileSaveService"); 
     //open Dialog 
     FileContents fc = fos.saveFileDialog("c:/data", null, new ByteArrayInputStream("Hallo Welt".getBytes()), "name.txt"); 
     System.out.println("FileContents: " + fc); 
     } catch (UnavailableServiceException e) { 
     System.err.println("***" + e + "***"); 
     } catch (IOException e) { 
     System.err.println("***" + e + "***"); 
     } 
     //wait a minute 
     try { 
     Thread.sleep(10000); 
     } catch (InterruptedException e) { 
     } 
     System.exit(0); 
    } 
} 

Tutto funziona tranne che la finestra di dialogo che si apre si presenta come una finestra di dialogo file "aperto", non come una finestra di dialogo "save":

FileDialog

Qualsiasi aiuto sarebbe apprezzato.

+0

Si potrebbe confrontare le vostre fss.saveFileDialog() '' parametri a quelli mostrati [qui] (http://docs.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/examples. html # FileSaveService). – trashgod

+1

Ho appena provato la [demo del servizio file] (http://pscode.org/jws/api.html#fs) in 1.7.0_21-b11 (Windows a 32 bit) e le finestre di dialogo Apri e salva sono state visualizzate come previsto. Che marca e modello JRE sono gli utenti in esecuzione? –

+0

Stiamo utilizzando la versione 1.6.0_31-b05 di JRE Java HotSpot (TM) Server VM a 64 bit – keuleJ

risposta

1

La finestra di dialogo File-Open è necessaria. Devi prima consentire all'utente di scegliere dove salvare i dati. Quindi una chiamata precedente a openFileDialog è assolutamente necessaria per un'applicazione jnlp. Non sei autorizzato a salvare direttamente in una posizione specifica come c:

Se segui il link indicato (http://docs.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/examples.html#FileSaveService) dovresti avere successo.

MODIFICA: per chiarimenti. Il salvataggio tramite javax.jnlp.FileSaveService richiede esattamente una chiamata. Per esempio chiamando SaveFileDialog() come questo dovrebbe essere sufficiente:

fss.saveFileDialog(null, null, new ByteArrayInputStream("Hallo Welt".getBytes() ), "newFileName.txt"); 

La necessità di un'User-dialogo è a causa della natura di anonimato jnlp, in cui l'applicazione non deve ottenere alcun suggerimento circa l'utente-filesystem. Tuttavia, devo ammettere che questa non era la tua domanda.

Il tuo problema principale deriva dall'app java che presenta ogni volta il "dialogo aperto" invece del "salvataggio-dialogo".

Questo non dovrebbe accadere! Se posso tranquillamente supporre dal tuo snippet in cui chiami fos.saveFileDialog: hai appena inizializzato fos tramite FileOpenService invece di FileSaveService?

Maggiori dettagli sul FileSaveService si possono trovare qui: http://docs.oracle.com/javase/7/docs/jre/api/javaws/jnlp/javax/jnlp/FileSaveService.html

+0

Quando eseguo il codice nell'esempio nel collegamento, vedo 3 volte una finestra di dialogo aperta. Che cosa hai visto? – keuleJ

Problemi correlati