2009-02-08 20 views
12

Belirli bir dosya için sistem tercih editörünü nasıl açacağımı anlamaya çalışıyorum.Verilen dosya için kullanıcı sistemi tercih editörü nasıl açılır?

Java'da yazılmış bir dosya yöneticimiz var. Kullanıcı klasöre gider ve dosya listesini görür. Ve örneğin, bir dosya Icon.jpg var. Kullanıcı dosya adına çift tıklar ve dosya sistemin tercih edilen editöründe açılır (örn. Gimp). Ana konu - nasıl yapılır?

Runtime.getRuntime().exec("something file") yapabiliriz, ancak bu şekilde, kullanıcı ortamında hangi programın tercih edildiğini bilmeniz gerekir. Ama nasıl?

Ayrıca Desktop.getDesktop().edit(File file)'u da yapabiliriz, ancak bu şekilde işlemi takip edemiyoruz ve bu durumda çocuk işlemi kapalı değil. Diğer sorun - işlev linux üzerinde çalışmıyor (en azından Ubuntu 8.10'da). Ayrıca, Desktop.getDesktop().open(File file) da var, ancak bu dosya türü için sistem görüntüleyici yerine dosya görüntüleyiciyi açmaya zorlanıyor.

Tüm hafta boyunca bir çözüm arıyorum, ancak uygun ve genel bir tanesini almadım. Bu soruya diğer yaklaşımları biliyor musunuz? Projem için Windows + Linux + Mac üzerinde çalışacak olsaydı yeterli olurdu.

Yanıtlarınız ve önerileriniz için teşekkür ederiz. 2009-02-08 23:04

Diğer öneri

Düzenleme: "dosya aç" ile Mac olduğu gibi Windows ve Linux "uygulama seçimi" penceresini zorlayabilirsiniz? Örneğin, dosyayı açmaya çalıştığınızda, tercih edilen sistemlerin listesinden uygulama seçmeniz isteniyor mu? (Windows explorer'da "... ile aç" gibi bir şey). Biliyor musun?

+0

Diğer öneri: Ben Mac gibi Windows ve Linux "uygulama seçimi" penceresini, zorlayabilirsiniz? Örneğin, dosyayı açmaya çalışıyorsunuz, daha sonra sistem listesinden seçimleri seçmeniz isteniyor mu? (Windows explorer'da "... ile aç" gibi bir şey). Biliyor musunuz? –

cevap

7

: Senin durumunda, size verilen bir platform, daha sonra aşağıdaki gibi bir şey (Bu kodu test değil) yapabileceği bu çağrıyı desteklediğini sağlamak istiyorsanız edit()

çağırmak istiyorum görünüyor ki sen işletim sistemleri arasında ayrım yapmak zorunda java.awt.Desktop kullanamıyorsanız: pencereler:

RUNDLL32.EXE SHELL32.DLL,OpenAs_RunDLL <file.ext> 

Linux:

edit <file.ext> 

Mac:

open <file.ext> 

HTH. Açıkçası, bu çok taşınabilir değil ...

+0

Bunlar Runtime.getRuntime(). Exec() işlevine yazmam gereken konsol komutları, doğru mu? –

+0

@ArturasSmorgun, Bu doğru –

+0

Not 'OpenAs_RunDLL' belgesiz ve [her zaman işe yaramıyor.] (Http://stackoverflow.com/questions/23566667/rundll32-shell32-dll) –

2

Bu çapraz platform değil, Mac OS X üzerinde size open(1) yürütülebilir çalıştırmak için doğru program almaya LaunchServices kullanır ve daha sonra filename adlı dosyayı açmak için kullanır

Runtime.getRuntime().exec("open filename"); 

yapabilirsiniz .

+0

Teşekkürler, bunu deneyeceğim. Bu benim için çok kullanışlıdır, çünkü şimdilik sadece kodumu Ubuntu ve Linux üzerinde test edebilirim ve Mac’te nasıl olduğu hakkında hiçbir fikrim yok. :) –

7

java.awt.Desktop nesnesine bakın.

public boolean editFile(final File file) { 
    if (!Desktop.isDesktopSupported()) { 
    return false; 
    } 

    Desktop desktop = Desktop.getDesktop(); 
    if (!desktop.isSupported(Desktop.Action.EDIT)) { 
    return false; 
    } 

    try { 
    desktop.edit(file); 
    } catch (IOException e) { 
    // Log an error 
    return false; 
    } 

    return true; 
} 
+0

Kesinlikle biliyorum, bu düzenleme() Ubuntu üzerinde çalışmıyor. Ama bu işlevsellik benim için gerekli. Edit() desteklenmiyorsa ne yapmam gerektiğini biliyor musunuz? –

-2

Bu pencerelerin

çalışacak
Runtime.getRuntime().exec("CMD /C START filename.ext "); 
+0

Hayır. Olmaz, p – westman379

İlgili konular