2013-05-17 32 views
8

Xin chào, tôi đang cố lưu một tệp từ Ứng dụng Java Webstart.JNLP FileSaveService mở hộp thoại mở tập tin

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

Mọi thứ hoạt động ngoại trừ hộp thoại mà đi lên trông giống như một hộp thoại tập tin "mở", không giống như một hộp thoại tập tin "tiết kiệm":

FileDialog

Bất kỳ trợ giúp sẽ được đánh giá cao.

+0

Bạn có thể so sánh tham số 'fss.saveFileDialog()' với các tham số được hiển thị [ở đây] (http://docs.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/examples. html # FileSaveService). – trashgod

+1

Tôi vừa thử [Demo dịch vụ tệp] (http://pscode.org/jws/api.html#fs) trong 1.7.0_21-b11 (Windows 32 bit) và hộp thoại mở & lưu xuất hiện như mong đợi. Điều gì tạo ra và mô hình JRE là những người dùng đang chạy? –

+0

Chúng tôi đang sử dụng phiên bản JRE 1.6.0_31-b05 Java HotSpot (TM) Máy chủ 64-Bit VM – keuleJ

Trả lời

1

Hộp thoại File-Open là cần thiết. Trước tiên, bạn cần cho phép người dùng chọn nơi lưu dữ liệu. Do đó, lệnh gọi hàm openFileDialog trước đó là cần thiết cho ứng dụng jnlp. Bạn không được phép trực tiếp lưu vào một vị trí cụ thể như c:

Nếu bạn theo liên kết được đề cập (http://docs.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/examples.html#FileSaveService), bạn sẽ thành công.

EDIT: để làm rõ. Lưu qua javax.jnlp.FileSaveService thực sự cần một cuộc gọi. Ví dụ gọi SaveFileDialog() như thế này nên là đủ:

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

Sự cần thiết của một người sử dụng Đối thoại là do bản chất ẩn danh của jnlp, nơi ứng dụng của bạn không nên nhận được bất kỳ gợi ý về sử dụng hệ thống tập tin. Tuy nhiên, tôi phải thừa nhận rằng đây không phải là câu hỏi của bạn.

Sự cố chính của bạn xuất phát từ ứng dụng java mỗi khi trình bày "đối thoại mở" thay vì "lưu đối thoại".

Điều này không nên xảy ra! Nếu tôi có thể giả sử một cách khiêm nhường từ đoạn mã của bạn nơi bạn gọi fos.saveFileDialog: bạn vừa mới khởi tạo fos bởi FileOpenService thay vì FileSaveService chưa?

tin chi tiết về các FileSaveService có thể được tìm thấy ở đây: http://docs.oracle.com/javase/7/docs/jre/api/javaws/jnlp/javax/jnlp/FileSaveService.html

+0

Khi tôi chạy mã trong ví dụ trong liên kết, tôi thấy 3 lần một hộp thoại đang mở. Bạn đã thấy gì? – keuleJ

Các vấn đề liên quan