Explorer über Code starten

jf

Bekanntes Mitglied
Hallo ihr Spezis,

ich möchte über einen JButton einen Ordner im Explorer anzeigen und idealerweise gleich noch eine Datei darin selektieren.

Das Öffnen eines Ordner kann man ja mit folgendem Code umsetzen:
Java:
Runtime.getRuntime().exec(new String[] {"explorer.exe", file.getAbsolutePath()});
Allerdings wird hierbei eine neue Instanz des Explorers gestartet, was ich gerne vermeiden möchte.

Das was ich will, erreicht man mit der Windows-API ShellExecute mit Übergabe des Pfades (aber ohne "explorer.exe") oder gleich mit der Windows-API SHOpenFolderAndSelectItems, um noch eine Datei zu selektieren. - Aber wie macht man des unter Java? Ist so ewas hier überhaupt möglich?

Gruß und vielen Dank für eure Hilfe!
 
Danke EikeB, das hilft mir schon weiter.
Java:
Desktop.getDesktop().open(folder);
So wird das Verzeichnis mit der aktuell laufenden Explorer-Instanz geöffnet (im Falle eines Ordner-Pfades),
bzw. es wird die Datei direkt geöffent (im Falle eines Datei-Pfades).

Code:
Desktop#open(File f)
schon versucht?
Das hat bei mir leider nicht funktioniert.
Was hat das mit der Raute auf sich? - Habe so etwas noch nie gesehen...

Ist das Selektieren einer Datei ebenfalls möglich?
 
Die Raute sollte nur klar machen dass das keine statische Methode ist.
Wenns mit
Code:
Desktop.getDesktop().open(folder);
funktioniert ist doch alles prima 🙂
 
Die Raute sollte nur klar machen dass das keine statische Methode ist.
Wenns mit
Code:
Desktop.getDesktop().open(folder);
funktioniert ist doch alles prima 🙂
Ah, alles klar.
Dachte, es ist evtl. eine verkürzte Singleton-Schreibweise - so ähnlich wie "ptr->method" für "(*ptr).method" unter C++.
(also Class#method == Class.getInstance().method), was sehr interessant gewensen wäre)
Also gibt es in Java keine Verwendung von Raute an dieser Stelle?
Handelt sich es hierbei jedoch um eine allgemein übliche Beschreibung?
 
Zuletzt bearbeitet:
glaub schon dass die schreibweise üblich ist.
Code:
Class.method
sagt dass die Methode static ist.
Code:
Class#method
sagt dass method eine Instanzmethode ist.
Hab ich mir aber noch nie so richtig gedanken drüber gemacht 😀
 
Die # kommt wohl eher von Javadoc Verlinkungen:
[JAPI]ArrayList#add(E)[/JAPI]
Forum BB Code:
Code:
[JAPI]ArrayList#add(E)[/JAPI]
 
Hi \m/,

Du hast keinen Einfluss auf [c]explorer.exe[/c]. Ausser du würdest es mit [c]exec()[/c] parametrisieren können.
Es gibt also auch keine Möglichkeiten unter Java die Windows-API anzusprechen?
Eigentlich müsste das schon gehen, wie sonst kann man mit Java ein Fenster erzeugen?
Naja, vlt. passiert das ja auch irgendwo ganz tief in der VM...

Aber viel wichtiger ist, dass es mit [c]Desktop.open()[/c] nicht nur unter Windoof funktioniert 😉
Ja, generell gebe ich dir Recht - aber für meine Anwendung ist Windows eben die Brot- und Butter-Plattform schlechthin, weshalb dieser Vorteil nicht mehr so gravierend ist. 😉


@AwesomeDude: JavaDoc also, alles klar. 🙂
 
Es gibt JNI und JNA (und anderes), um das System über DLLs etc. anzusprechen. Swing etc. ist tief in der Std API verwurzelt. Es gibt aber auch 3th Party Software, welche Systemzugriff benötigt. Dein Beispiel der GUIs: Es gibt von Eclipse SWT, das ist native. Da muss man sich zu der Jar immer noch eine DLL, ein SO, ... downloaden, welches alles systemnahe erledigt.
 
Ich hätte doch noch mal eine Frage hierzu:
Die Bibliothek java.awt.Desktop gibt es erst ab Java 1.6 - kennt jemand eine Alternative hierzu in älteren Java-Versionen?
 

Zurück
Oben