2013-05-17 20 views
8

Witam Próbuję zapisać plik z aplikacji Java Webstart.JNLP FileSaveService otwiera okno dialogowe otwierania pliku

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); 
    } 
} 

Wszystko działa oprócz tego, że pojawia się okno dialogowe, które wygląda jak okna wyboru plików „open”, nie jak okna wyboru pliku „Zapisz”:

FileDialog

Każda pomoc będzie mile widziane.

+0

Możesz porównać parametry 'fss.saveFileDialog()' z tymi, które pokazano [tutaj] (http://docs.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/examples. html # FileSaveService). – trashgod

+1

Po prostu wypróbowałem wersję demonstracyjną [File Service demo] (http://pscode.org/jws/api.html#fs) w 1.7.0_21-b11 (Windows 32 bit), a dialogi open & save pojawiły się zgodnie z oczekiwaniami. Jaką wersję i model JRE mają użytkownicy? –

+0

Używamy wersji JRE 1.6.0_31-b05 64-bitowy serwer Java HotSpot (TM) VM – keuleJ

Odpowiedz

1

Wymagane jest okno dialogowe otwierania pliku. Najpierw musisz pozwolić użytkownikowi wybrać miejsce zapisania danych. Zatem poprzednie wywołanie metody openFileDialog jest bezwzględnie konieczne dla aplikacji jnlp. Nie możesz bezpośrednio zapisywać w określonej lokalizacji, takiej jak c:

Jeśli będziesz postępować zgodnie ze wspomnianym linkiem (http://docs.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/examples.html#FileSaveService), powinieneś odnieść sukces.

EDYCJA: w celu wyjaśnienia. Zapisywanie przez javax.jnlp.FileSaveService dokładnie wymaga jednego połączenia. Na przykład dzwoni saveFileDialog(), tak jak to powinno wystarczyć:

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

Konieczność jeden użytkownik-Dialog to ze względu na charakter anonimizujących z JNLP, gdzie aplikacja nie powinien dostać jakąkolwiek wskazówkę o łatwość obsługi systemu plików. Muszę jednak przyznać, że to nie było twoje pytanie.

Twoje główne problemy wynikają z aplikacji Java, która za każdym razem przedstawia "otwarty dialog" zamiast "zapisz dialogi".

To nie powinno się zdarzyć! Jeśli mogę pokornie założyć z twojego fragmentu, gdzie nazywasz się fos.saveFileDialog: czy po prostu zainicjowałeś fos przez FileOpenService zamiast FileSaveService?

Więcej szczegółów na temat FileSaveService można znaleźć tutaj: http://docs.oracle.com/javase/7/docs/jre/api/javaws/jnlp/javax/jnlp/FileSaveService.html

+0

Po uruchomieniu kodu w przykładzie w łączu widzę 3 razy otwarte okno dialogowe. Co widziałeś? – keuleJ

Powiązane problemy