Javaprogramm soll doppeltgeklickte Datei verarbeiten

Status
Nicht offen für weitere Antworten.

Partheeus

Aktives Mitglied
Moin...... :D

Mir viel leider kein anderer Titel ein.....sorry.
Ich hab schon soviel gesucht, gelesen, aber leider nichts hilfreiches gefunden. :-(
Hoffe hier kann man mir ein wenig helfen... :)

Problem:
Beim Doppelklick einer *.xyz Datei soll mein ganz bestimmtes Java Programm sich öffnen und den
Inhalt der Datei weiterverarbeiten.....

Lösungsansatz???:
Vielleicht so eine Art Listener, der, wenn sich das Programm öffnet den Dateiinhalt weiterverarbeitet???
Habe leider keinen Anhaltspunkt wo ich ansetzen soll.... :-(

Szenario:
Schicke mir eine Mail, mit Anhang Zahl.ulf, Beim Doppelklick dieser Datei soll sich nun mein Java Programm
öffnen und die Datei verarbeiten. Falls mein Programm schon offen ist, soll es einfach nur die Datei verarbeiten.

Vorraussetzung:
- Betriebssystem Windows;
- die Dateiendung *.xyz ist erfolgreich einem Programm in der Registry zugeordnet...

Hoffe ihr habt mich so in etwa verstanden??? Wäre schön wenn man mir hier weiterhelfen könnte... :)
Denke da irgendwie an Drag & Drop....da gibt es doch auch bestimmte Listener die beim Drgen und Droppen
Ereignisse auslösen und etwas weiterverarbeiten, oder???

Vielen Dank schonmal im Vorraus....
Hoffe ich habs ins richtige Unterforum gepostet...?!

Partheeus
 
B

Beni

Gast
Wenn sich das Programm erst öffnen soll, kannst du alles mit Listenern vergessen, das Betriebssystem selbst muss dahinter.

Bei Windows: Den Explorer starten > Folder options > File Types. Da die Endung .xyz nehmen (oder eintragen), dann auf "advanced", und eine Action "open" machen. Für "Application used to perform action:" trägst du ein: "JavaVerzeichnis\java.exe" -jar "DeinProgramm.jar" "%1"

Danach sollte bei einem Doppelklick automatisch dein Programm aufgehen, und der Name der Datei wird der "main"-Methode des Progis übergeben (über den String[] args). Ob mein Syntax da oben gerade richtig war, kann ich allerdings nicht sagen :wink:
 

Partheeus

Aktives Mitglied
Das hört sich doch schonmal gut an.....
Ist mir gar net eingefallen, die Datei in main mitzugeben....

Was aber mache ich wenn das Programm offen ist? Doch einen bestimmmten Listener verwenden??
Wenn ja, welcher sollte es sein? Habe noch von soeinem nicht gehört....

Ulf
 

Leroy42

Top Contributor
Ich glaube, das geht so nicht.

Man kann zwar über eine File-Lock oder eine Portbelegung
so etwas simulieren, aber ein zweiter Aufruf deines Programms
mit dem gesamten JVM-Gerödel wird wohl nicht zu vermeiden sein :(

BTW: Wie macht Windows(Linux?) das eigentlich? Sucht es nach einer
laufenden Programminstanz in den aktuellen Tasks und teilt dieser dann mit,
eine neue Datei zu bearbeiten? Wie?
 
S

stev.glasow

Gast
Leroy42 hat gesagt.:
BTW: Wie macht Windows(Linux?) das eigentlich? Sucht es nach einer
laufenden Programminstanz in den aktuellen Tasks und teilt dieser dann mit,
eine neue Datei zu bearbeiten? Wie?
Sie starten das Program ein zweites mal. Zumindest ist das bei mir immer so. :roll:
 

thE_29

Top Contributor
UDP und Port Locking ist die Devise!


Such dir einen Port der von "niemanden" benutzt wird und häng dich dran (mit DataGramSocket)

So, wird dein programm ein 2tes mal gestartet, kann es diesen Port nicht mehr nutzen da von Instanz1 schon belegt!

So jetzt schickt Instanz2 über UDP den Dateinamen an Instanz1 und beendet sich selbst!

Tadaaaaaam
 

Leroy42

Top Contributor
@the29

Das hatte ich ja auch schon mit dem Portbelegung geschrieben
Man kann zwar über eine File-Lock oder eine Portbelegung
so etwas simulieren, aber ein zweiter Aufruf deines Programms
mit dem gesamten JVM-Gerödel wird wohl nicht zu vermeiden sein

und du schreibst ja selbst, daß sich die zweite Instanz selbst beenden
soll. Der OP wollte meiner Meinung nach aber bezwecken daß überhaupt
keine 2. Instanz gestartet wird.

@Steve

Das verstehe ich jetzt nicht :shock:
In meinem Textpad (Windoof) kann ich z.B. einstellen, ob bei Klicken
auf eine ".java" Datei eine neue Instanz gestartet wird oder die
existierende einfach ein neues Unterfenster aufmacht.
 

byte

Top Contributor
Textpad ist auch keine Java-Anwendung. Java ist nun mal plattformunabhängig und all die oben beschriebenen Features sind plattformbezogen auf Windows. Wer sein Programm auf diese Weise den Windows-Stempel aufdrücken will, der kann auch gleich eine native Sprache verwenden.
 

Leroy42

Top Contributor
Das ist mir schon klar und ich habe ja nur aus Neugierde gefragt,
wie Windows sowas macht
BTW: Wie macht Windows(Linux?) das eigentlich? Sucht es nach einer
laufenden Programminstanz in den aktuellen Tasks und teilt dieser dann mit,
eine neue Datei zu bearbeiten? Wie?
 

thE_29

Top Contributor
byto hat gesagt.:
Textpad ist auch keine Java-Anwendung. Java ist nun mal plattformunabhängig und all die oben beschriebenen Features sind plattformbezogen auf Windows. Wer sein Programm auf diese Weise den Windows-Stempel aufdrücken will, der kann auch gleich eine native Sprache verwenden.


Ajo, und wo ist das Programm bitte Windows Spezifisch?? (das Programm das der Threaderöffner machen will, also net Fu Textpad)


Die Einstellung das Programm xyz bei Date .xyz ausgeführt werden soll, muss man bei jedem OS selber tätigen!


Und jetzt zeig mir bitte wo das Programm nur unter Windows laufen sollte ....



@Leo42: Woher weißt du den das es Textpad net auch so macht?? Vielleicht gibs einfach nen Loader, der dir alle Windowsprogramme listet (is ur easy in Winapi) und schickt dem programm eine Nachricht (noch easier.. gibts alles Standard Api Methoden) und dieser Loader macht sich zu..

Das geht so schnell, das kriegst du sicher net mit!


Und da das so schnell ist und JVM net, kriegt man es in java mit ^^
 

thE_29

Top Contributor
Also, ne WinApi bzw komplett von Windows beherschende Funktion ^^

Tjo, das scheidet mal aus!

Ich würds über den UDP Weg machen!
 

Leroy42

Top Contributor
@byte: Danke für den Link

thE_29 hat gesagt.:
@Leo42: Woher weißt du den das es Textpad net auch so macht
:autsch: Aber genau das weiss ich doch eben nicht und habe deshalb ja auch als Nicht Window-Internist gefragt :bahnhof:

und daß Textpad keine Java-Anwendung ist und es dem OP um Java-Anwendungen geht ist
mir auch klar. Deshalb habe ich ja ausdrücklich BTW(*) for meine Frage gestellt.

Ich geh' jetzt mal 'ne Runde schmollen :?


(*)
BTW: BTW heißt BTW
 

Partheeus

Aktives Mitglied
Vielen Dank schonmal für Eure Hilfe.....ABER.... :autsch:

... wie schon richtig erkannt, darf ich aber keine 2. Instanz öffnen....
Plattformunabhängigkeiten betreffen mich nicht mehr, dafür ist schon 'zuviel Windows' drin....z.B. Systray etc.,
war aber nicht meine Idee! Glaubt es mir! *g

Hmm, also gibt es dafür nicht wirklich einen Listener, was? :bahnhof:

Kennt jemand vielleicht ein Javaprogramm was das vielleicht kann??? Evtl. auch mit GPL und SRC???
Dann könnte ich mir das da mal anschauen, aber mir persönlich fällt keines ein.
Habs mit dem GanttProject versucht, aber das öffnet sich auch immer wieder neu. :cry:

Das kann doch net so schwer sein........ :### ???:L

Ulf
 

thE_29

Top Contributor
Ähm, warum darf sich keine 2. Instanz öffnen??

Du musst ja nix anzeigen!

Das sind dann ungefähr 4 sekunden laufzeit und 20 Programmzeilen...


Ansonten wenns eh schon zu Windows ist, einen C++ Loader bauen!
 

schoppenhauer_entfernt_

Bekanntes Mitglied
Wie wäre es damit, das ganze doch mit nem port zu machen, nur das Programm das sendet "eine Datei soll geöffnet werden" ist speziell für windows (meinetwegen in c geschrieben oder so) und startet - wenn der port nicht belegt ist - eine instanz deiner datei?
 

Partheeus

Aktives Mitglied
Erstmal Danke für die Antworten und Vorschläge hier. :)

Das Problem wurde jetzt (für Windows) ersteinmal so gelöst das eine Datei angelegt wird, wenn das
programm startet. Auf diese Datei wird ein Lock 'gegeben', wird nun nocheinmal versucht das Programm
zu starten, überprüft es ob der Lock schon besteht, falls ja dann schließt sich diese Instance wieder,
falls nicht startet das Programm normal. :)

MfG Ulf
 

schoppenhauer_entfernt_

Bekanntes Mitglied
Nur aus Interesse (nachdem ich sowas ähnliches aufwändig mit sockets hingepfuscht hab):
1. Dabei musst du doch auch ne VM starten, die schaut, ob die Datei bereits geöffnet ist?
2. Wie stellst du fest auf welchen Dateinamen doppelgeclickt wurde?
 

SebiB90

Top Contributor
Schoppenhauer hat gesagt.:
Nur aus Interesse (nachdem ich sowas ähnliches aufwändig mit sockets hingepfuscht hab):
1. Dabei musst du doch auch ne VM starten, die schaut, ob die Datei bereits geöffnet ist?
2. Wie stellst du fest auf welchen Dateinamen doppelgeclickt wurde?
zu 2.: das müsste deiner main methode übergeben worden sein, also im string array drin stehen
 

schoppenhauer_entfernt_

Bekanntes Mitglied
SebiB90 hat gesagt.:
zu 2.: das müsste deiner main methode übergeben worden sein, also im string array drin stehen
Nein. Er lässt doch wenn ich das richtig verstanden habe ne neue vm starten... Dann muss er aber dem erstausgeführten prog irgendwie sagen, welche Datei ihm übergeben wurde... Mich würde interessieren wie er das macht, ohne loopback.
 

SebiB90

Top Contributor
Schoppenhauer hat gesagt.:
SebiB90 hat gesagt.:
zu 2.: das müsste deiner main methode übergeben worden sein, also im string array drin stehen
Nein. Er lässt doch wenn ich das richtig verstanden habe ne neue vm starten... Dann muss er aber dem erstausgeführten prog irgendwie sagen, welche Datei ihm übergeben wurde... Mich würde interessieren wie er das macht, ohne loopback.
du hörst doch ein port mit dem socket ab oder?
dann kannste ihm über dem socket/port den dateinamen übermitteln oder nich
 

schoppenhauer_entfernt_

Bekanntes Mitglied
Meine Frage bezog sich hierauf:
Partheeus hat gesagt.:
Erstmal Danke für die Antworten und Vorschläge hier. :)

Das Problem wurde jetzt (für Windows) ersteinmal so gelöst das eine Datei angelegt wird, wenn das
programm startet. Auf diese Datei wird ein Lock 'gegeben', wird nun nocheinmal versucht das Programm
zu starten, überprüft es ob der Lock schon besteht, falls ja dann schließt sich diese Instance wieder,
falls nicht startet das Programm normal. :)

MfG Ulf
SebiB90 hat gesagt.:
du hörst doch ein port mit dem socket ab oder?
dann kannste ihm über dem socket/port den dateinamen übermitteln oder nich
Ja. ICH höre den Port ab. Aber laut obigem Zitat geht es dann auch ohne port... Und genau das will ich wissen. Dass es mit Port geht, und dass ich da den Dateinamen weitergeben kann, ist ja keine Kunst... Aber wenn das auch ohne geht...

Also ich weiß nicht... Als mit dem Prog von mir das das benutzt noch angefangen habe, da habe ich so nen Pfusch mit ner Datei die alle zwei Sekunden geöffnet wird gemacht, wo dann der Dateiname reingeschrieben wird :oops: . Nunja... Das sollte man nicht machen... ist nicht gut für die Gesundheit :wink: .
 

Partheeus

Aktives Mitglied
Sorry für verspätete Antwort. Hab das jetzt erst mitbekommen das hier noch was aktiv ist.

Hab das mal grob zusammengefasst. Hoffe Du kannst was mitanfangen.

singleApp.gif



- Die Datei die angeklickt wurde wird der Instance übergeben.
- dann oos = ObjectOutpurStream(FileOutputstream(bla));
->oos.writeObject(arg)
- eventuell Instance schließen.
- den eigenen Listener instanciieren(?) um sicher zu gehen das args[] 'übernommen' werden können.
- args[] mit geöffneter Instance verarbeiten und fertig
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Doppelklick auf Javaprogramm klapt nicht Allgemeine Java-Themen 1
J Aus JavaProgramm Setup Exe aufrufen Allgemeine Java-Themen 9
M Aus Javaprogramm .NET Quellcode kompileren Allgemeine Java-Themen 2
E Protokollierung zu Javaprogramm Allgemeine Java-Themen 5
H CLASSPATH im Javaprogramm ändern Allgemeine Java-Themen 5
A Javaprogramm als Windowsservice starten Allgemeine Java-Themen 4
L Javaprogramm als SoundIn Device Allgemeine Java-Themen 3
D ewig laufendes Javaprogramm ("Service") Allgemeine Java-Themen 17
T Javaprogramm unter Linux auf bestimmten Kern starten/laufen lassen ? Allgemeine Java-Themen 22
M Maus durch JavaProgramm bewegen Allgemeine Java-Themen 2
G Javaprogramm ohne Java Allgemeine Java-Themen 24
B Javaprogramm als Dienst mit Netzwerkzugriff? Allgemeine Java-Themen 5
F JavaProgramm mit der Tastatur Steuern Allgemeine Java-Themen 3
J Javaprogramm ueber Windowskontextmenue starten Allgemeine Java-Themen 2
V JavaProgramm von Konsole starten geht nichtmehr Allgemeine Java-Themen 4
K Zugriff von Javaprogramm auf Worddoku Allgemeine Java-Themen 2
C Javaprogramm von außen steuern? z.b mit VB Allgemeine Java-Themen 11
S Javaprogramm lässt sich nicht per .bat Datei ausführen. Allgemeine Java-Themen 22
R Javaprogramm von der Konsole starten Allgemeine Java-Themen 4
b3ny javaprogramm als windows anwendung compilieren Allgemeine Java-Themen 9
J Welchen Packager soll ich verwenden. Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
Noahscript Konto anlegen um JDK herunterzuladen? Was soll das? Allgemeine Java-Themen 1
E Angabe wie groß Array sein soll und in for-schleifen diesen Array füllen Allgemeine Java-Themen 3
J Message Box soll bei bestimmter Zeit angezeigt werden Allgemeine Java-Themen 19
M 4 Gewinnt KI macht nicht, was sie soll.. Allgemeine Java-Themen 1
J Überschriebene Funktion soll nicht die super Funktion aufrufen Allgemeine Java-Themen 4
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
perlenfischer1984 Lombok Builder soll andere Klasse bauen Allgemeine Java-Themen 4
C Eclipse einstellen, dass eine bestimmte JDK benutzt werden soll Allgemeine Java-Themen 3
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
R serielles Terminal mit Java: Cursor soll blinken Allgemeine Java-Themen 4
L Wie genau soll ein Klassendiagramm sein Allgemeine Java-Themen 4
I JPanel soll sich dem JFrame anpassen Allgemeine Java-Themen 1
S Bachelorarbeit , soll ich ? soll ich nicht? Allgemeine Java-Themen 23
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
H JFileChooser soll NUR Windows-Netzwerkumgebung anzeigen Allgemeine Java-Themen 2
I JTextArea soll nur drei Zeilen anzeigen Allgemeine Java-Themen 1
K Methode soll neue Buttons erstellen Allgemeine Java-Themen 5
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
J java-applikation-1.jar soll java-applikation-2 aufrufen.jar Allgemeine Java-Themen 5
C Reflektions, Benutzer soll Konstruktor auswählen und Parameter übergeben können Allgemeine Java-Themen 5
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
S Threads ServerSocket-Thread soll schlafen, bis er gebraucht wird Allgemeine Java-Themen 2
T Welches Tuturial soll ich paralell lesen ? Allgemeine Java-Themen 3
G Jar-File soll eignen *.jar Namen ausgeben Allgemeine Java-Themen 10
D Dialog soll sich beim Klick auf Button schließen Allgemeine Java-Themen 8
L JAR verändern - JAVAC soll einfach nur kompilieren, ohne Prüfungen Allgemeine Java-Themen 16
C Abstrakte Klasse soll Methode aus Unterklasse aufrufen Allgemeine Java-Themen 3
D Input/Output Datei ausgewählt - Datei soll nicht existieren Allgemeine Java-Themen 5
S exec( "cmd /c") aber Konsole soll offen bleiben Allgemeine Java-Themen 9
L Entscheiden, welcher Code ausgeführt werden soll Allgemeine Java-Themen 7
I Swing Welche Swing Komponente soll ich nehmen? Allgemeine Java-Themen 2
R Programm soll warten bis eine Passwort eingabe gemacht wurde. Allgemeine Java-Themen 6
R FileChooser soll nur das File ausgeben Allgemeine Java-Themen 4
B Java soll Datei von Javascript empfangen Allgemeine Java-Themen 4
E Bitcode liegt vor und soll gespiegelt werden Allgemeine Java-Themen 4
B Scheduler soll bestimmten Job stoppen Allgemeine Java-Themen 4
H2SO3- jar soll eigenen namen(pfad) finden Allgemeine Java-Themen 12
J Main-Thread soll auf alleKinder Threads warten Allgemeine Java-Themen 5
B Thread soll anderen Thread beenden Allgemeine Java-Themen 5
R ANT Jar Task soll leere Verzeichnisse ignorieren..? Allgemeine Java-Themen 3
Developer_X JButton soll gar nichts machen Allgemeine Java-Themen 8
M Ein Array-Wert soll sich verändern, aber 2 tun es? Allgemeine Java-Themen 7
J Zweiter Prozess der alle x Sekunden etwas abfragen soll Allgemeine Java-Themen 2
G Was ist Ant und warum soll ich das brachen, wenn es IDEs gib Allgemeine Java-Themen 10
X Software soll einen Text vorlesen! Allgemeine Java-Themen 5
P Copiler soll nicht vorhandene Methoden ignorieren Allgemeine Java-Themen 2
G Apache soll mit SVN zusammenarbeiten Allgemeine Java-Themen 3
J double 3.0 soll ohne Nachkommastelle ausgegeben werden Allgemeine Java-Themen 12
B Programm soll auf die Eingabe vom Mouselistener warten. Allgemeine Java-Themen 19
S String soll Anführungszeichen enthalten. Allgemeine Java-Themen 2
M Methode soll warten, bis Button gedrückt Allgemeine Java-Themen 2
Y Methode soll 2 Werte zurückliefern Allgemeine Java-Themen 7
ARadauer programm soll sich selbst ändern können Allgemeine Java-Themen 20
F Klasse soll sich selbst returnieren mit entsprechendem Typ. Allgemeine Java-Themen 15
U Programm soll sich nach update neustarten Allgemeine Java-Themen 30
A NullPointerException, Thread soll Thread steuern Allgemeine Java-Themen 2
MQue HintergrundFarbe des Buttons beim drücken soll bleiben Allgemeine Java-Themen 2
A equals() macht nicht, was es soll Allgemeine Java-Themen 4
E Java-Programm soll Java-Programm "fernsteuern" -wi Allgemeine Java-Themen 3
G Jar File soll anderes benutzen Allgemeine Java-Themen 3
Nils_Langner InputStream soll sich bei neuen Daten melden Allgemeine Java-Themen 2
Q Methode soll auf schließen eines Frames warten Allgemeine Java-Themen 4
S Log4J mit 2 Appender, einer soll nur INFO loggen Allgemeine Java-Themen 3
H Nur bis zur letzten Textzeile soll gelesen werden Allgemeine Java-Themen 4
G Was soll noch alles in Java kommen? Allgemeine Java-Themen 14
K Methode soll ein Array zurückgeben Allgemeine Java-Themen 4
M Ein Thread soll ein Textfeld (SWT) ändern Allgemeine Java-Themen 4
B Thread soll auf Event warten, dann Daten an Klasse senden Allgemeine Java-Themen 2
R Thread soll auf MouseClick warten Allgemeine Java-Themen 2
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
S Java Programm soll im Hintergrund laufen (vgl. fork() bei C) Allgemeine Java-Themen 10
G To many Code? Was soll der scheiß? Allgemeine Java-Themen 11
T Soll ich meine Software als freeware zum download geben? Allgemeine Java-Themen 15
thE_29 Werden die SUN JVMs immer blöder oder was soll das. Allgemeine Java-Themen 11
T Klasse soll Object sein->um in JTabbedPane einzufügen Allgemeine Java-Themen 2
A Textfeld soll verschiedene Datumseingaben akzeptieren Allgemeine Java-Themen 5
1 Applet soll PDF von Servlet empfangen Allgemeine Java-Themen 3
S Welchen Editor soll man für Graphische lösungen benutzen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben