Domanda

Sto cercando di capire come aprire l'editor preferito sistema per un determinato file.

Di ', abbiamo un file manager, scritto in Java. Utente va a cartella e vede l'elenco dei file. E, per esempio, c'è un file Icon.jpg. utente fa doppio clic sul nome del file e file si apre nella preferito editor di sistema (vale a dire Gimp). Il problema principale è -? Come fare

Possiamo fare Runtime.getRuntime().exec("something file"), ma in questo modo si dovrebbe sapere quale programma è preferito in ambiente utente. Ma come?

Anche noi siamo in grado di fare Desktop.getDesktop().edit(File file), ma in questo modo non possiamo seguire processo e non siamo in grado di sapere, allora questo processo figlio è chiuso. Altro problema - la funzione non funziona su Linux (almeno su Ubuntu 8.10). C'è anche Desktop.getDesktop().open(File file), ma costringe ad aprire il visualizzatore di file, invece di visualizzatore di sistema per tale tipo di file.

Sto cercando una soluzione per tutta la settimana, ma non ha avuto alcun uno adatto e generico. Sai altri approcci a questa domanda? Per il mio progetto sarebbe sufficiente se avrebbe funzionato su Windows + Linux + Mac.

Grazie per le vostre risposte e consigli.

Modifica il 2009-02-08 23:04

Altro suggerimento: posso forzare "Selezione applicazioni" finestra in Windows e in Linux, come in Mac con "file aperto"? Ad esempio, allora si cerca di aprire il file, vi viene chiesto di scegliere l'applicazione dall'elenco di quelli sistema preferito? (Qualcosa come "Apri con ..." in Windows Explorer). Sai?

È stato utile?

Soluzione

Sembra che se non è possibile utilizzare java.awt.Desktop si deve distinguere tra i sistemi operativi: Windows:

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

Linux:

edit <file.ext>

Mac:

open <file.ext>

HTH. Ovviamente, questo non è molto portabile ...

Altri suggerimenti

Controlla la java.awt.Desktop oggetto. Nel tuo caso, si vuole invocare edit()

Se si vuole garantire che una determinata piattaforma supporta questa chiamata, allora si può fare qualcosa di simile a quanto segue (non ho ancora testato questo codice):

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

Questo non è cross-platform, ma su Mac OS X si può fare

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

L'eseguibile open(1) utilizza LaunchServices a raccogliere il programma giusto per eseguire, e quindi lo utilizza per aprire il file denominato filename.

Questo funziona in Windows

Runtime.getRuntime().exec( "CMD /C START filename.ext " );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top