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.
eine Klasse aus der Jar-Datei aus dem Servlet starten
Hallo,
Da das Programm, das in dieser Klasse Programm aus dem Servlet starten in der 'Runtime'-Anweisung gestartet wird, auch ein Java-Pgm ist, bilde ich mir ein, dass es möglich ist, eine Java-Klasse aus dem JAR-Paket zu starten, ohne dass man auf 'Runtime'-Objekt zurückgreifen muss. Diese zwei Programme können doch miteinander kommunizieren, ohne die Kommandozeile des Betriebssystems? Ich habe jetzt alle Klassen, die in der *.jar gepackt sind, in die Servlet-Klasse IndexAktualisieren eingebunden und die Kompilierung bringt dabei keine Fehler. Wie kann ich eine Main-Klasse (wird in der jetzigen Lösung mit einer Anweisung
Bin mir nicht ganz sicher, ob ich die Frage verstanden habe. Wenn du aus einem Java-Programm ein anderes starten willst, dann kannst du die zweite main-Methode aufrufen wie jede andere statische Methode:
Code:
package p1;
public class C1 {
public static void main( String[] args) {
System.out.println( "C1#main");
}
}
Code:
package p2;
import p1.C1;
public class C2 {
public static void main( String[] args) {
System.out.println( "C2#main");
p1.C1.main( new String[0]);
}
}
Danke, Murray, genau an so eine Lösung habe ich gedacht. Wie aber wird ein Parameter, der in die Klasse C2 eingegeben wird, an die Klasse C1 beim Aufruf übergebun? So
Code:
package p2;
import p1.C1;
public class C2 {
public static void main(String parameterFuerDieC1Klasse[] ) {
System.out.println(parameterFuerDieC1Klasse[0] );
p1.C1.main(parameterFuerDieC1Klasse[0] );
}
}
klappt es nicht,
C2.java:9: main(java.lang.String[]) in p1.C1 cannot be applied to (java.lang.String)
p1.C1.main(parameterFuerDieC1Klasse[0] );
^
1 error
meldet mir der Compiler. In welches Objekt muss ich parameterFuerDieC1Klasse packen, um ihn dann weitergeben? In der Zeile 7 wird der Parameter richtig angezeigt. Wenn ich die C1-Klasse in der Kommandozeile starte mit einem Parameter, dann wird er auch korrekt eingelesen. Habe jetzt fleissig die Basics zum Thema 'Aufrufparameter für Applikationen in Java' studiert, bin aber nicht weiter gekommen
Die Main erwartet ja selbst wieder ein String-Array. Also entweder übergibst du das komplette Array
Code:
public class C2 {
public static void main(String[] parameterFuerDieC1Klasse ) {
p1.C1.main(parameterFuerDieC1Klasse);
}
}
Oder du nimmst nur das erste Element und verpackst es in ein neues Array (das könnte sinnvoll sein, wenn C2#main auch eigene Parameter versteht und nur einen Teil durchreichen soll).
Code:
public class C2 {
public static void main(String[] parameterFuerDieC1Klasse ) {
p1.C1.main( new String[]{parameterFuerDieC1Klasse[0]});
}
}
Mit der Parametübergabe klappt's jetzt. Die Anwendung aus der Jar-Datei wurde aber nur einmal mit einer Fehlermeldung ausgeführt. Das Programm in der Jar-Datei ist ursprunglich ein Java-Programm, dass in der Kommandozeile ausgeführt wird und einen Index über die Dateien auf dem Server erstellt. In der Fehlermeldung wird mitgeteilt, dass das Pgm den alten Index nicht löschen kann. Gibt es vielleicht allgemeine Empfehlungen, wie man so ein Standalone-Pgm für ein Aufruf aus einem Servlet heraus tauglich macht?