Datei öffnen mit . jar

Diskutiere Datei öffnen mit . jar im Allgemeine Java-Themen Forum

12 ...
  1. #1
    The_S


    Datei öffnen mit . jar

    Hi,

    ist es möglich unter Windows einzustellen, dass ein bestimmter Datentyp immer mit einer bestimmten JAR geöffnet werden soll (ich denke mal, die Datei wird als Parameter übegeben!?)? Wenn ich das über den "Öffnen Mit" Dialog versuche bekomm ich die Meldung, dass die zu öffnende Datei keine gültige Win32 Anwendung ist. Ich denke mal das liegt daran, dass Windows eine JAR nicht als Programm ansieht und ich das JAR-File als Anwendung auch nur auswählen kann, wenn ich den Filter von "Programme" auf "Alle Dateien" ändere.

    danke!

  2. #2
    stev.glasow

    Bau dir einfach ne bat oder ne exe die die jar startet.
    Und die gibst du dann bei "öffnen mit ..." an.

  3. #3
    SlaterB

    hast du es schon mit den Windows-Verknüpfungen probiert?
    Verknüpfung auf 'java -jar ..', öffnen mit Verknüpfung?

  4. #4
    The_S


    @stevg wie stell ichs bei ner bat an, dass die übergebenen Parameter an den Aufruf mit übergeben werden?

    @SlaterB hatte ich nicht, aber bei einem Versuch kommt die selbe Meldung

  5. #5
    stev.glasow

    %1 oder $1 oder so ähnlich. die Anzahl bekommst bestimmt auch irgendwie raus. Frag mal google :###

  6. #6
    stev.glasow

    Könnte aber sein, das du unbedingt ne exe brauchst.
    http://www.marochess.de/chess/tools/jlaunch/

  7. #7
    The_S


    Zitat Zitat von stevg
    Könnte aber sein, das du unbedingt ne exe brauchst.
    http://www.marochess.de/chess/tools/jlaunch/
    Danke, das schaut doch schonmal gut aus. Werds mir bei Gelgenheit mal anschauen

  8. #8
    Illuvatar


    Zu dem Ergebnis auf dem Screenshot http://home.arcor.de/sidiousx/filetype.jpg

    kommt man per JDIC mit folgendem Code (nur Windows ):
    Code:
    AssociationService as = new AssociationService();
    			File startbat = new File ("JMind.bat");
    			BufferedWriter bw = new BufferedWriter (new FileWriter (startbat));
    			File chosen = new File (System.getProperty("user.dir"));
    			bw.write("@echo off");
    			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();
    			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");
    			jm3.addAction (jm3Action);
    			InputStream is = ClassLoader.getSystemResourceAsStream("icon.ico");
    			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();
    			jm3.setIconFileName (new File ("jMindMapIcon.ico").getAbsolutePath());
    			as.registerSystemAssociation (jm3);

  9. #9
    thE_29


    Oder aber auch!

    Explorer öffnen!

    Extras->Ordneroptionen->Dateitypen

    Gewünschten Dateityp auswählen oder neu erstellen!

    Dann auf Erweitert!

    Dort Neu und Namen geben für Aktion (Öffnen als bsp)

    Als Programm zB das eingeben:

    C:\Programme\Java\jdk1.5.0_06\jre\bin\java.exe -jar C:\Programm.jar %1


    Natürlich müssen die Pfade angepasst werden, aber so geht das!

  10. #10
    The_S


    @thE_29 Das erscheint mir als beste und einfachste Möglichkeit. Werd ich daheim gleich mal ausprobieren danke!

  11. #11
    thE_29


    Ich schreibe dir gerade ne nette Funktion

    brb!

  12. #12
    thE_29


    Code:
        /****************************************************************************************************************************
         * Methode registriert eine Dateiendung mit einem java programm
         * Also die Dateiendung ruft implizit eine .jar Datei auf mit der eigentlichen Datei als 1ten Übergabeparameter
         * @param file_end_suffix String Dateindung von dem neuen Typen (ohne .)
         * @param path_to_java_program String Java Programm das via java -jar programm.jar aufgerufen wird
         * @param optional_icon String optionales Bild was bei der neuen Dateiendung gesetzt werden kann 
         * ACHTUNG Damit das Bild angezeigt wird, muss entweder der PC neugestartet werden oder der explorer neu gestartet werden
         * @throws FileNotFoundException wenn der Java Interpreter nicht gefunden wurde, das jar File oder das Icon (wenn nicht null)
         ***************************************************************************************************************************/
        public static void registerJavaProgram(String file_end_suffix, String path_to_java_program, String optional_icon) throws FileNotFoundException
        {
          if(file_end_suffix == null)
            throw new NullPointerException("Suffix cannot be null");
          if(file_end_suffix.startsWith("."))
            throw new IllegalArgumentException("Suffix has to be declared without leading point (for example: xyz and not .xyz)\nYours: " + file_end_suffix);
          if(path_to_java_program == null)
            throw new NullPointerException("Java program cannot be null");
          if(!path_to_java_program.endsWith(".jar"))
            throw new IllegalArgumentException("Java programm must be a jar file: " + path_to_java_program);
          if(!new File(path_to_java_program).exists())
            throw new FileNotFoundException("Java programm cannot be found at: " + path_to_java_program); 
          if(optional_icon != null && !new File(optional_icon).exists())
            throw new FileNotFoundException("Icon cannot be found at: " + optional_icon);
          String _home = System.getProperty("java.home");
          if(!_home.endsWith(File.separator))
            _home = _home.concat(File.separator); //hängt einen backslash hinten dazu
          _home = _home.concat("bin" + File.separator + "java.exe"); //hier javaw.exe reinschreiben, wenn die gewünscht ist
          if(!new File(_home).exists())
            throw new FileNotFoundException("java interpreter not found at: " + _home);
          String HCR = "[HKEY_CLASSES_ROOT\\.";
          //dadurch das replaceAll mit regex arbeitet und einmal \\ == \ im string müssen wir \\\\ für 2 \\ das regex kapiert, das ich einen backslash meine
          _home = _home.replaceAll("\\\\","\\\\\\\\"); //alle \ gehören durch doppelte \\ ersetzt
          path_to_java_program = path_to_java_program.replaceAll("\\\\","\\\\\\\\");
          if(optional_icon != null)
            optional_icon = optional_icon.replaceAll("\\\\","\\\\\\\\"); //auch hier alle Backslashes durch doppelte ersetzen
          try{
            File exFile = File.createTempFile("progregister",".tmp");
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(exFile)));
            bw.write("Windows Registry Editor Version 5.00");
            bw.newLine();
            bw.newLine();
            bw.write(new StringBuffer(HCR).append(file_end_suffix).append("]").toString());
            bw.newLine();
            bw.newLine();
            bw.write(new StringBuffer(HCR).append(file_end_suffix).append("\\Shell]").toString());
            bw.newLine();
            bw.newLine();
            bw.write(new StringBuffer(HCR).append(file_end_suffix).append("\\Shell\\Open]").toString());
            bw.newLine();
            bw.newLine();
            bw.write(new StringBuffer(HCR).append(file_end_suffix).append("\\Shell\\Open\\Command]").toString());        
            bw.newLine();
            bw.write(new StringBuffer("@=\"").append(_home).append(" -jar ").append(path_to_java_program).append(" %1 \"").toString());
            if(optional_icon != null)
            {
              bw.newLine();
              bw.newLine();
              bw.write(new StringBuffer(HCR).append(file_end_suffix).append("\\DefaultIcon]").toString());
              bw.newLine();
              bw.write(new StringBuffer("@=\"").append(optional_icon).append("\"").toString());
            }
            bw.flush();
            bw.close(); //schließt das File
            Runtime.getRuntime().exec("regedit /s " + exFile.getAbsolutePath()).waitFor(); //speichert den Eintrag in der registry
            if(!exFile.delete())
              exFile.deleteOnExit();
          }
          catch(Exception ex)
          {
            ex.printStackTrace();
          }
        }
    Problem gibts nur beim Icon..

    Man muss irgendwie den Explorer refreshen, aber wie das geht ohne das ich ihn abwürge weiß ich nicht...

  13. #13
    The_S


    Nicht schlecht ... Eigentlich sogar absolut genial . Herzlichen Dank, werds daheim gleich mal ausprobieren. Mit welcher Windows-Version hast du das getestet?

    Theoretisch liese sich auf diesem Weg zumindest unter Windows ein Starter-File MIT Icon (und sehr kryptischer Dateiendung, aber immerhin) generieren ...

  14. #14
    thE_29


    Habs mit WindowsXP getestet! Kanns aber auch unter Win2k testen!

    Sollte IMHO gleich sein, außer das vielleicht Windows Registry Editor Version 5.00 hier ein 4.00 gehört!

    Oder war das NT? (Fragen über Fragen)

    Mache sowas schon seit Jahren so und klappt immer so Man glaubt gar net alles was man in der registry alles rumstellen kann!
    (Man sollte aber net rumpfuschen wenn man net weiß, was man tut)




    PS.: wenn du die java Box net haben willst, musst halt javaw.exe statt java.exe bei _home dazuhängen!

  15. #15
    The_S


    teste mal bitte unter Windows 2000 wenn du Zeit hast. Da kann ich das nämlich leider nicht testen. Danke. Frühere Versionen benötige ich nicht.

    Zitat Zitat von thE_29
    (Man sollte aber net rumpfuschen wenn man net weiß, was man tut)
    Deswegen lass ich die Finger von der Registry

  16. #16
    The_S


    Hm, kann man auch irgendwie definieren, dass n-Parameter mit übergeben werden können?

  17. #17
    thE_29


    Also, es läuft auch unter Win2k!

    Wie welche Parameter?!

  18. #18
    The_S


    Wenn ich mehrere Dateien gleichzeitig übergeben möchte bzw öffne. Z. B. mehrere Bilder. Oder geht das schon? Dieser Satz macht mich nur ein bisschen stutzig

    Also die Dateiendung ruft implizit eine .jar Datei auf mit der eigentlichen Datei als 1ten Übergabeparameter
    ...

  19. #19
    thE_29


    Ahaa.... Also wenn du 10 Files aufeinmal aufmachst?

    Da wird leider jedes mal das aufgerufen!

    Das etwas nur 1mal aufgemacht wird, wenn man 10 Dinger aufeinmal anklickt ist vom Programm so geregelt!

    Mach mal 10 jar Dateien auf.. Werden auch alle geöffnet und net nur 1 JVM!

  20. #20
    The_S


    Hm ok. Dann müsste ich mir da Programm-Seitig was überlegen. Werd schon ne Möglichkeit irgendwie finden (hoff ich ).

    Aber aufjedenfall nochmal n großes Danke

12 ...
Java Videokurs

Keine Antwort auf Deine Suche gefunden? Registriere Dich kostenlos und stelle Deine eigene Frage zu Java!

Jetzt kostenlos registrieren