2009-02-18 30 views
6

Tôi đang hiển thị danh sách tệp; tức là xls, doc, pdf, odt, v.v., trong ứng dụng Java của tôi (Eclipse RCP). Khi người dùng nhấp vào tệp, tôi muốn khởi chạy ứng dụng gốc thích hợp (theo những gì hệ điều hành nghĩ), giống như nó xảy ra trong Windows Explorer hoặc Trình tìm kiếm.Làm thế nào để khởi chạy ứng dụng mặc định (bản địa) cho một tệp nhất định từ Java?

Và khi tôi ở đây: Sẽ tốt hơn nếu bạn hiển thị cùng một biểu tượng mà Finder hoặc Explorer sử dụng cho các loại tệp khác nhau.

Có thư viện hoặc plugin Eclipse cho mục này không?

+1

này dường như là một bản sao của câu hỏi này: http://stackoverflow.com/questions/325299/cross-platform-way-to-open-a- tập tin-sử dụng-java-1-5 –

+1

Không thực sự, thông báo giới hạn Java 1.5 ở đó: "Tôi biết rằng Java 1.6 đã giới thiệu API Desktop, nhưng tôi cần một giải pháp cho Java 1.5." – Jonik

Trả lời

2

Có vẻ như bạn đang theo dõi Java Activation Framework ("JAF"). API này cho phép bạn xác định tệp nào là gì và những hành động nào bạn có thể thực hiện trên chúng. Hoặc cách khác là Java Desktop Integration Component ("JDIC"). JDIC cho phép bạn tạo và không nghi ngờ các liên kết tệp truy vấn.

Cả hai dự án có vẻ như đang ở trạng thái bán phá giá (tiếng thở dài). Nhưng đó là mệnh cho khóa học cho Sun những ngày này. Chỉ có một điều tôi biết là một số thư viện của bên thứ ba cụ thể của Windows dựa trên JNI được gọi là Winpack. Nó cũng có một loạt những thứ khác nữa.

Bạn có thể get the associated icon bằng cách sử dụng lớp FileSystemView (Java 1.4+).

+0

Hmm, Desktop.open() có vẻ là cách đơn giản nhất. Nếu người ta có thể sử dụng Java 6, có một số lợi thế khi sử dụng một trong các lib này thay thế không? – Jonik

6

Tôi đã tìm thấy một API trong SWT của Eclipse bây giờ dường như thực hiện thủ thuật: org.eclipse.swt.program.Program "cung cấp quyền truy cập vào các cơ sở để khám phá các khía cạnh cụ thể của hệ điều hành của chương trình bên ngoài."

Nó có các phương pháp để tìm chương trình cho một phần mở rộng tệp đã cho, nhận biểu tượng của chương trình và thậm chí khởi chạy chương trình.

11

gì bạn muốn là java.awt.Desktop:

Desktop.getDesktop().open(file); 
+1

Máy tính để bàn không hoạt động tốt trên Windows: 'java.io.IOException: Không thể mở tệp:/C: /Documents%20and%20Settings/Administrator/Desktop/test.pdf. Thông báo lỗi: Ứng dụng không được tìm thấy \t lúc sun.awt.windows.WDesktopPeer.ShellExecute (Nguồn không xác định) ~ [na: 1.6.0_26] ' – Eero

+2

Eero, hàm hoạt động như được thiết kế: http://download.oracle.com /javase/6/docs/api/java/awt/Desktop.html#open%28java.io.File%29 mở sẽ ném một IOException "nếu tệp được chỉ định không có ứng dụng liên quan hoặc ứng dụng liên quan không được khởi chạy". Bạn có thể nghĩ về việc nhắc cho một ứng dụng sử dụng nếu một IOException được ném ra. –