Externes Programm starten, Speicheraufwändig

fireflyer

Mitglied
Hallo,

ich habe ein (hoffentlich kleineres) Problem eine .jar Datei zu starten.
Ich habe eine kleine GUI gemacht, wenn man dort auf einen Button klickt wird über
Java:
Process p = Runtime.getRuntime().exec("java -jar anyjar.jar");
eine jar-Datei in einem extra Thread gestartet.

Dies funktioniert bereits auch mit 2 anderen .jars so. Diese ist allerdings relativ Speicheraufwändig (>=1GB RAM).

Das ganze verhält sich nun witzigerweise so:
Die jar-Datei wird gestartet, ich erhalte ein paar Zeilen des StdOut-Streams und dann bleibt es plötzlich hängen. Sobald ich aber nun die GUI schließe (also System.exit(0)) aufgerufen wird macht er weiter. Die .jar Datei wird komplett ausgeführt (natürlich sehe ich so nix mehr vom Outputstream etc. aber zumindest die Ergebnisdatei ist nach wenigen Minuten korrekt).
Wenn ich das ganze per cmd/terminal aufrufe klappt alles ganz normal, nur aus java heraus leider nicht.

Meine bisherigen Versuche:
- das ganze mit java -Xmx2G zu starten
- Ohne den StdOut Stream abzufangen

Wie ich schon sagte verfahre ich so auch mit 2 anderen .jar-Dateien dort klappt alles wunderbar. Was die Datei genau macht kann ich nicht sagen, es wird eine XML-Datei analysiert in vielen Schritten.

Ich habe noch eine Vermutung:
Kann es sein das ein Prozess davor die XML-Datei auf der gearbeitet wird sperrt? Es läuft davor ein Prozess der diese XML-Datei anlegt, der 2. (der nicht funktioniert) soll damit nun weiterarbeiten. Falls ja, wie kann ich die ressourcen freigeben lassen?

Hoffe jemand kann mir helfen, wär echt super!

Vielen Dank schonmal im Vorraus :)

Viele Grüße,
fireflyer
 

FArt

Top Contributor
Du startest nicht eine JAR Datei in einem anderen Thread sondern eine Javaapplikation in einem neuen Prozess.

Schau mal bei Orcle im Tutorial nach wie man das richtig macht. Auf jeden Fall musst du STDOUT und STDERR des geforkten Prozesses konsumieren, sonst blockiert der Prozess wenn der Puffer voll ist.

Abgesehen davon sieht dein "Konzept" nicht sonderlich sinnvoll aus. Da gibt es sicher noch Optimierungspotential. Warum müssen das verschiedene Prozesse sein? Und vermutlich benötigen sie so viel Speicher, weil du die XML Verarbeitung ungünstig angelegt hast... (liest du ein großes XML auf einen Rutsch ein?).
 

fireflyer

Mitglied
Hallo,

was ist das für ein Orcle Tutorial, ich kann das hier nirgends finden.

Auf diese externen .jar Files habe ich keinen Zugriff die sind nicht von mir ich kann sie nur ansteuern.
Was dort genau passiert weiss ich auch nicht.

Ich habe allerdings noch was probiert:
Diesen Prozess einfach in der main-methode, also ohne alles andere, zu starten. Klappt leider ebenfalls nicht, es funktioniert nur von der Konsole aus. An dem StdOut etc. kann es auch nicht liegen das habe ich da garnicht benutzt.

Viele Grüße,
fireflyer
 

fireflyer

Mitglied
Okay, das mit dem Prozess werde ich mal versuchen :)

Was auch ein Problem ist, das die Datei blockiert wird. Und zwar nachdem ich sie mit diesem Code durchsucht habe:
Java:
try {
				XMLEventReader evRd;
				XMLInputFactory inputFactory = XMLInputFactory.newInstance();
				StreamSource stream = new StreamSource(this);
				evRd = inputFactory.createXMLEventReader(stream);
			    while( evRd.hasNext() ) {
			    	XMLEvent ev = evRd.nextEvent();
//hier wird die XML Datei auf bestimmte Merkmale durchsucht
			    }
			    evRd.close();
			} catch (XMLStreamException e) {
				e.printStackTrace();
			}
Das this was da übergeben wird ist ein File-Objekt. Soweit ich weiss kann man das File-Objekt nicht schließen oder sowas, zumindest konnte ich nix in die Richtung finden. Auf jeden Fall ist ab diesem Zeitpunkt die Datei blockiert, kann man diesen Umstand irgendwie ändern?

Nochmals vielen Dank :)

Viele Grüße,
fireflyer
 

FArt

Top Contributor
Mache ein kleines, vollständiges Beispiel daraus, welches das Problem reproduziert. Was genau bedeutet, "die Datei blockiert"?
Auf eine Datei wird auch mit einem Stream zugegriffen. Der muss am Ende geschlossen werden. File ist lediglich ein abstraktes Objekt.
 

fireflyer

Mitglied
Hi,

also das mit dem Beispiel ist eher schwierig da ich das was ich gerade mache (noch) nicht herausgeben darf :(
Im Grunde funktioniert es aber so:

phase1.jar
generiert aus einer txt-datei eine xml datei

phase2.jar (die die nicht funktioniert)
fügt in diese xmldatei zusätzliche informationen ein

phase3.jar
liest diese xml-datei und macht eine visualisierung daraus

Was in diesen einzelnen Phasen genau passiert weiss ich leider auch nicht, die stammen alle nicht von mir. Ich soll sie nur zentral ansteuern.
Es funktioniert alles bis eben auf phase2. Wenn ich diese starte dann fängt sie an und wartet dann aber wohl darauf das der java-prozess beendet wird oder sowas.
Der code den ich da benutze dient lediglich dazu die xml-dateien zu unterscheiden die aus phase1 und phase2 kommen. Denn diese müssen ja nicht noch einmal phase2 durchlaufen. Aber dieser ist eig. so schon vollständig, mehr passiert da nicht. Diese StreamSource kann ich auch nicht schließen, lediglich beim XMLEventReader gibt es eine methode close(). Aber auch wenn ich diese Prozedur nicht mache funktioniert es nicht, ich vermute also das es nicht an einer blockierten Datei liegt, denn es funktioniert ja auch nicht:

phase1.jar manuell machen

main {
start phase2.jar (nur das, ohne alles andere. klappt aber auch nicht)
}

Kann es sein das in phase2 irgendwas eingebaut ist sodass es sicherstellt das keine anderen java-prozesse am laufen sind oder sowas?

Ich hab das auch mit dem ProcessBuilder versucht, klappt leider auch nicht :(

Viele Grüße,
fireflyer
 

FArt

Top Contributor
Dir fehlt eine Menge an Basiswissen. Das kann ich dir hier auch nicht auf die Schnelle vermitteln.

Warum der Ablauf auf drei Prozesse verteilt ist, ist eigentlich in der Regel nicht sinnvoll. Zur Fehleranalyse musst du wissen, was dieses Programme machen, und ob z.B. diese sauber ihre Ressourcen schließen (z.B. FileOutputStream nach dem Schreiben).
ll
Für mich hört sich das alles seltsam und geheimnisvoll an... zur Analyse bleibt aber nicht aus, dass du weißt was wo passiert und dass die anderen Prozesse alles richtig machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Externes Programm auf anderem Bildschirm starten Allgemeine Java-Themen 3
X Aus Java Applikation externes Programm starten Allgemeine Java-Themen 3
J Externes Programm starten und stoppen (Linux) Allgemeine Java-Themen 3
B Externes Programm starten - Konsolenausgabe anzeigen lassen? Allgemeine Java-Themen 2
P Externes Programm starten und beeinflussen Allgemeine Java-Themen 11
padde479 Externes Programm starten Allgemeine Java-Themen 7
T Mit java externes Programm starten Allgemeine Java-Themen 4
M externes Programm aus Java heraus starten Allgemeine Java-Themen 2
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
Thallius Herausfinden ob ein externes Programm schon gestartet ist? Allgemeine Java-Themen 10
H Externes Programm, Parameter Allgemeine Java-Themen 6
M in Abhänigkeit vom FileFilter, externes Programm ausführen Allgemeine Java-Themen 12
F externes Programm beginnt erst nach dem ende des mainprogrammes Allgemeine Java-Themen 3
H Externes Programm in JAR einbinden Allgemeine Java-Themen 11
N Externes Programm steuern Allgemeine Java-Themen 12
J Externes Programm - Konsolenausgabe kopieren/sichtbar machen Allgemeine Java-Themen 22
S externes programm Allgemeine Java-Themen 6
C externes Programm läuft erst nach schließen des mainprogramm Allgemeine Java-Themen 7
W Externes Programm beenden mit eigenem Programm beenden Allgemeine Java-Themen 7
M Externes Programm ausführen Allgemeine Java-Themen 2
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
S externes Mehrweg-Mischen Allgemeine Java-Themen 3
cedi int Zahl in ein ASCII zeichen umwandeln und dieses in ein externes Textfenster schreiben Allgemeine Java-Themen 6
E Externes bat sichtbar ausführen Allgemeine Java-Themen 4
L Externes Bash Script aus Java Datei heraus starten Allgemeine Java-Themen 2
N externes Sortieren (MergeSort Allgemeine Java-Themen 2
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
T Addons im eigenen Programm Allgemeine Java-Themen 1
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
D Programm designen Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
S Nachrichten Filter Programm Allgemeine Java-Themen 14
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
L Eclipse Konsole im exportierten Programm Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
S Einfaches Programm programmieren Allgemeine Java-Themen 5
M kleines KI Programm Idee Allgemeine Java-Themen 7
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
N Programm startet nicht, nur per cmd Allgemeine Java-Themen 5
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
R Programm zur Rekursion Allgemeine Java-Themen 5
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
dereki2000 Programm veröffentlichen Allgemeine Java-Themen 14
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
kodela Programm hängt in der Ereigniswarteschlange Allgemeine Java-Themen 13
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
P Programm darf nicht mehrfach startbar sein Allgemeine Java-Themen 16
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
JavaNewbie2.0 Programm nicht im Taskmanager schliesen können Allgemeine Java-Themen 15
J XML Datei mit installiertem Programm öffnen Allgemeine Java-Themen 7
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
JavaNewbie2.0 Programm bleibt "stehen" Allgemeine Java-Themen 2
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
Aruetiise Methoden .jar mit Programm öffnen Allgemeine Java-Themen 2
C anderes Programm schließen! Allgemeine Java-Themen 5
C Webseiten Programm problem Allgemeine Java-Themen 5
E Programm auf Installation prüfen Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben