Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Die Überschrift sagts schon ganz gut. Ich habe via swing einen Dialog zum öffnen von .class-Dateien. Ich bekomme also einen String zB: "C:\Programm.class"
Bislang hab ich es so versucht:
Code:
String file = "Programm.class"
Process p = Runtime.getRuntime().exec( "java "+file);
Das funktioniert aber nur wenn die .class datei auf C:\ liegt. Wenn sie zB in C:\test\test2\Programm.class liegt, funktioniert auch folgendes NICHT:
Code:
String file = "C:\test\test2\Programm.class"
Process p = Runtime.getRuntime().exec( "java "+file);
Natürlich is das totaler Käse aber ich hoffe die Idee kommt so an wie gedacht: Ich möchte quasi eine Klasse nutzen (zB Main methode aufrufen) von der ich nur den Pfad habe.
Hallo hexagon,
ich bin zwar auch totaler Anfänger, aber es könnte sein, dass ich dir helfen kann :wink:
Ich glaube der Fehler liegt am Backslash
Code:
String file = "C:\test\test2\Programm.class"
Java benutzt die Backsslash um Zeilenumbüche, Tabulaturen und ähnliches in Strings einzufügen (Escape-Sequenzen).
Ersetz mal alle \ durch \\, dann erkennt Java das du das Zeichen \ meinst und keine Funktion um Strings zu formatieren.
Vielleicht klappt es dann.
Also, es gibt zwei Möglichkeiten. Was davon willst du genau machen?
a) Eine neue Java-Runtime starten, mit der besagten Klasse als main-Klasse. Dann wird von der Klasse die main-Methode aufgerufen, du hast aber keinen Einfluss mehr darauf und kannst nicht mehr kommunizieren (d.h., außer über System.in/out). Das geht mit Runtime#exec. Allerdings solltest du dir da erstmal anschauen, wie man ein Java-Programm per Konsole startet, da ist nämlich nix mit ".class", und auch nichts mit Pfadangabe. Das wäre dann eher so:
Code:
Process p = Runtime.getRuntime().exec ("java -cp [ordner-in-dem-die-klasse-liegt] [name-der-datei (ohne class)]");
(vorrausgesetzt, die Klasse ist in keinem Package)
b) Du willst die Klasse in deinem Programm verwenden. Dazu brauchst du einen ClassLoader, in dem Fall vermutlich einen URLClassLoader.
Code:
ClassLoader loader = new URLClassLoader(new URL[]{
new File ("[ordner-in-dem-die-klasse-liegt]").toURI().toURL()
});
Class<?> myClass = loader.loadClass ("[Klassenname]");
// ab hier per reflection weiter