jar per doppelklick auf datei parameter übergeben

Status
Nicht offen für weitere Antworten.

Bastian

Bekanntes Mitglied
wie kann man es realisieren, dass eine jar-datei (unter windows) bei einem doppelklick auf irgendeine andere datei, deren speicher-ort-parameter übergeben bekommt? normalerweise geht es ja mit rechtsklic->öffnenMit. allerdings stört windows, dass jar-dateien keine 32-bit programme sind... (über konsole ist es allerdings kein problem, parameter zu übergeben)

(konkretes ziel ist es eine *.txt datei per doppelklick immer mit meinem als *.jar-file vorliegendem programm zu öffnen)

Bleibt mir etwa nur der weg, dies über einen exe-wrapper zu realisieren? das funktioniert zwar wunderbar, nur hat man eben eine *.exe datei 🙁
 
du musst das ganze ja der runtime übergeben (java.exe)
das du das direkt der Jar übergibst kann ja gar nicht gehen
da die Jar dann als ganz normale Datei angesehen wird
 
Nick H. hat gesagt.:
du musst das ganze ja der runtime übergeben (java.exe)
das du das direkt der Jar übergibst kann ja gar nicht gehen
da die Jar dann als ganz normale Datei angesehen wird

ja.... aber wie??? wie übergibt man mit windows per doppelklick auf eine datei diese (zusammen mit meinem Programm) an die runtime?

nocheinmal:

Konsolenebene:
java -jar MeinProgramm.jar Test.txt
Dies funktioniert. es wird direkt beim laden des programmes die datei test.txt geöffnet.

grafische Oberfläche, Windows:
Ich klicke auf Test.txt -> MeinProgramm.jar soll geöffnet werden und Test.txt laden.

(die ganze prozedur ist kein problem, wenn ich MeinProgramm.jar zu MeinProgramm.exe wrappe, das *.exe datein für windows ja im allg. ganz normale 32-bit anwendungen sind.
 
ja klar denk mal nach:

>>java -jar MeinProgramm.jar Test.txt
startet ja die exe "java"

wenn du nun einfach die Textdatei an MeinProgramm.jar übergibst sieht das sieht aus:
>>MeinProgramm.jar Test.txt
und wenn du das in die Konsole eingibst kommt der gleiche Fehler

also musste die Datei einfach an ein anderes Programm übergeben
das dann das ganze an die java.exe übergibt mit "-jar MeinProgramm.jar" davor
 
Nick H. hat gesagt.:
ja klar denk mal nach:

>>java -jar MeinProgramm.jar Test.txt
startet ja die exe "java"

wenn du nun einfach die Textdatei an MeinProgramm.jar übergibst sieht das sieht aus:
>>MeinProgramm.jar Test.txt
und wenn du das in die Konsole eingibst kommt der gleiche Fehler

also musste die Datei einfach an ein anderes Programm übergeben
das dann das ganze an die java.exe übergibt mit "-jar MeinProgramm.jar" davor

also ist es unter windows wohl das einfachste, das programm einfach zu einer exe zu wrappen...

und wie sieht das unter anderen betriebssystemen aus vorzugsweise unix ( bzw linux) oder mac?
 
Also ich hab mal was gemacht, das eine bat schreibt und das mit JDIC so einrichtet, dass das funktioniert:

Code:
		if (prefs.getProveJdic()){ //wenn nicht ausgestellt
	    	AssociationService as = new AssociationService();
	    	if (as.getFileExtensionAssociation ("jm3") == null){ //noch nicht registriert
	    		int x = new MyDialog (null, resource.getString("nojdic"), resource.getString("warning")).showDialog(); //Nochmal nachfragen
	    		if (x == MyDialog.DONTSHOW){ //"Nicht wieder anzeigen"
	    			prefs.setProveJdic(false);
	    		}else if (x == MyDialog.CONTINUE){
	    			try {
				    	File startbat = new File ("JMind.bat"); //Batchdatei
				    	BufferedWriter bw = new BufferedWriter (new FileWriter (startbat));
				    	File chosen = new File (System.getProperty("user.dir"));
				    	bw.write("@echo off"); //Datei schreiben
				    	bw.newLine();
				    	bw.write(chosen.getAbsolutePath().substring(0, 2));
				    	bw.newLine();
				    	bw.write("cd " + chosen.getAbsolutePath());
				    	bw.newLine();
				    	String javahome = System.getProperty("java.home", "");
				    	String filesep = File.separator;
				    	bw.write ("START " + javahome + filesep + "bin" + filesep + "javaw.exe -jar jMindMap3D.jar " + ((args.length != 0 && args[0].equals("-debug")) ? "-debug" : "") + "%1");
				    	bw.close(); //Batchdatei fertig
				    	Association jm3 = new Association ();
			    		jm3.addFileExtension ("jm3");
			    		org.jdesktop.jdic.filetypes.Action jm3Action = new org.jdesktop.jdic.filetypes.Action ("open", startbat.getAbsolutePath() + " \"%1\"", "Open jMindMap3D"); //eintrag zur Batchdatei
			    		jm3.addAction (jm3Action);
			    		InputStream is = ClassLoader.getSystemResourceAsStream("icon.ico"); //icon entpacken
			    		OutputStream os = new FileOutputStream ("jMindMapIcon.ico");
			    		byte[] buf = new byte[512];
			    		int len;
			    		while ((len = is.read(buf)) >= 0){
			    			os.write(buf, 0, len);
				    		}
			    		is.close();
			    		os.close(); //icon entpackt
			    		jm3.setIconFileName (new File ("jMindMapIcon.ico").getAbsolutePath()); //icon setzen
				    	as.registerSystemAssociation (jm3); //fertigstellen
				    }catch (Exception ex) {
				    	JOptionPane.showMessageDialog(null, ex);
				    	ex.printStackTrace();
				    }
	    		}
	    	}
		}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben