2012-03-13 57 views
5

Từ ứng dụng của tôi được viết bằng java Tôi muốn mở một thư mục, bằng cách sử dụng trình thám hiểm tệp hệ điều hành.Mở đường dẫn bằng Desktop.open() từ java trên ubuntu (linux)

tôi sử dụng Desktop.open (new File (đường dẫn))

này hoạt động tốt trên các cửa sổ, nhưng trên ubuntu 11.10 (linux) nó không hoạt động. Sử dụng Desktop.open để mở một tệp không hoạt động, cả trên ubuntu và windows.

Sử dụng một bước ở giữa: Tệp fPath = tệp mới (fPath) và thử nghiệm nó với fPath.exists() và fPath.isDirectory() cả hai đều đúng.

sử dụng Desktop.open (new File (đường dẫn)) mang lại cho tôi ngoại lệ này:

java.io.IOException: Failed to show URI:file:/and/here/the/path/I/use/ 
at sun.awt.X11.XDesktopPeer.launch(Unknown Source) 
at sun.awt.X11.XDesktopPeer.open(Unknown Source) 
at java.awt.Desktop.open(Unknown Source) 

tôi đã không thể kiểm tra điều này trên một máy tính táo, nhưng tôi hy vọng Desktop.open (mới tệp (đường dẫn)) là hệ thống độc lập .....

bằng cách này, các mã hoàn chỉnh:

Desktop desktop = null; 
    // Before more Desktop API is used, first check 
    // whether the API is supported by this particular 
    // virtual machine (VM) on this particular host. 
    if (!Desktop.isDesktopSupported()) { 
     // show Error 
     return; 
    } 
    desktop = Desktop.getDesktop(); 
    String path = "here the path "; 
    // by the way: I use System.getProperty("file.separator") as file seperator 
    try { 
     File fPath=new File(path); 
     if(!fPath.exists()){ 
      // show Error 
      return; 

     } 
     if(!fPath.isDirectory()){ 
      // show Error 
      return; 

     } 
     desktop.open(new File(path)); 
    } catch (IOException e) { 
     log.severe(e.getMessage()); 
     e.printStackTrace(); 
     // show Error 
     return; 
    } 

Một số thông tin thêm: hệ điều hành: Linux (3.0.0-16-generic - amd64)

Java: 1.6.0_30-b12

Java nhà: /opt/java/64/jre1.6.0_30

+0

bằng cách này, cuối cùng thì các mã có thể có rất nhiều nhỏ gọn hơn, tôi đã sử dụng nhiều dòng hơn để xây dựng ở một số kiểm tra thêm để gỡ lỗi này .... Desktop.getDesktop(). mở (tệp mới (đường dẫn)); nên làm các thủ thuật trong 1 dòng ... cố gắng nắm bắt xung quanh nó, sẽ không làm tổn thương. Cũng như Desktop.isDesktopSupported() bắt được. –

+0

Vẫn không tìm được giải pháp đúng, nhưng cũng không có thời gian để kiểm tra máy tính khách hàng thouroughly .... (ví dụ như phiên bản adobe) –

+0

Nhân tiện: Tôi thấy một trong những khách hàng của tôi có cùng một vấn đề với Cửa sổ PC .... –

Trả lời

0

tôi không thể xác nhận lỗi. Tôi lấy mã của bạn và xây dựng một phương pháp chính xung quanh nó, và tất cả mọi thứ hoạt động như mong đợi. Tôi không biết chính xác nơi các ứng dụng mặc định được thiết lập (trong trường hợp PCMan của tôi đã được mở thay vì Nautilus thông thường, nhưng nó sẽ hoàn thành mục đích của nó cuối cùng).

Qua số java.awt.Desktop.open doesn’t work with PDF files? Tôi đã tìm thấy liên kết trỏ đến an issue in Suns (Oracles) bug tracker cho biết rằng phương pháp mở tệp bằng AWT không đáng tin cậy ngay cả trên Windows. Có lẽ bạn nên nghĩ đến những cách khác để mở các ứng dụng như vậy. Hơn nữa AWT sẽ sớm ngừng sử dụng gần như chắc chắn.

Nếu bạn đang sử dụng SWT trong ứng dụng của mình, bạn có thể sử dụng org.eclipse.swt.program.Program.

+0

Ok, nhờ cố gắng, tôi thường sử dụng nautilus là tốt, nhưng như một vấn đề của thực tế, tôi không thực sự quan tâm những gì thám hiểm tập tin sẽ mở ra, miễn là có mở ra một ..... 1 câu hỏi cho bạn, bởi vì tôi đọc rất nhiều trước khi đăng bài này, và tôi đã đi cùng một lỗi 64 bit Desktop .... và tôi có một máy tính xách tay 64 bit. Bạn có sử dụng máy tính 32 hoặc 64 bit không? –

+0

Xem các chỉnh sửa. Tôi đang ở trên 32 bit. – phineas

+0

Thanx để biết thêm thông tin, tôi đã chỉnh sửa câu hỏi của mình, mở tệp không phải là vấn đề, chỉ cần mở đường dẫn trên ubuntu. Tôi đã không nhận thức được vấn đề AWT/SWT của sự phản đối ... (tốt để biết) –

0

Tôi đã chạy vào cùng một vấn đề và quyết định cung cấp cho Java 7 một xoáy. Tôi đang chạy phiên bản java "1.7.0_147-icedtea" trên Ubuntu 11.10_x64 và tôi có thể mở các vị trí tệp trong Nautilus khá vui vẻ ngay bây giờ.

+0

Thanx cho đề xuất này, tôi có thể thử. Tuy nhiên ... khách hàng đang gặp sự cố hoạt động trong các cửa sổ và phát hành bản phát hành không phải trên máy tính của khách hàng ..... –

1

Tôi đã chạy vào những gì âm thanh giống như vấn đề tương tự trên Mint 13. Từ những gì tôi có thể nói, thay đổi để xử lý mime cho các thư mục mở đã bị hỏng java Desktop api. Tôi đã có thể làm việc xung quanh vấn đề bằng cách chỉnh sửa

~/.local/share/applications/defaults.list 

và thêm dòng này

x-directory/normal=nautilus.desktop 

Tôi đang chạy Mint 13 Cinnamon với phiên bản java "1.7.0_05"

0

Tôi có cùng một vấn đề trên Linux Mint của tôi (và không phải trong Windows).

Liên kết đó đã giúp tôi: Troubles with java.awt.Desktop browse() method.

Điều này có vẻ hoạt động trên Linux Mint-KDE của tôi. Tôi đã thay đổi dòng

Desktop.getDesktop().desktop.open(new File("/home/user/mypath"));// this throws IOException: Failed to show URI (except in Windows) 

với

Desktop.getDesktop().desktop.open(new File("///home/user/mypath"));// this launches Dolphin 

hoặc với

Desktop.getDesktop().desktop.open(new File(new URI("file:///home/user/mypath").getPath()));// this launches Dolphin 

Dolphin đã được đưa ra với thư mục của tôi "mypath". Nhưng tôi không tìm thấy cách nào để mở một tệp như pdf hoặc txt trên Linux của mình trong khi nó hoạt động trên Windows với mã đầu tiên.

(Java 1.8.0_25, Netbeans 8.02, Linux Mint 12 KDE)

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