Bluescreen bei Runtime.exec();

Tiim

Mitglied
Hallo zusammen.

Ich bekommen bei meiner Java Anwendung regelmässig einen BlueScreen, sobald ich auf einen bestimmten Button auf menem GUI clicke.

Wenn ich auf den Button cklicke wird ein neuer Task zu meinem TaskPool hinzugefügt, und ausgeführt.

Das Programm, wird jedoch richtig gestartet, wenn es genügend Zeit vor dem BlueScreen hat.

Bei Click auf den Button wird folgendes ausgeführt:
Java:
TaskPool.getInstance().addTask(new Run("C:\\Program Files\\PSPad editor\\PSPad.exe"));

Der RunTask sieht folgendermassen aus:
Java:
package ch.forthedit.tasks;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import ch.forthedit.gui.ide.OutputPane;
import ch.forthedit.gui.ide.ToolPane;
import ch.forthedit.project.Project;

/**
 * 
 * @author tim
 */
public class Run implements Task {

	protected String[] args;

	public Run(String executable, String... args) {
		if (args != null) {
			this.args = new String[args.length + 1];
			this.args[0] = executable;
			System.arraycopy(args, 0, this.args, 1, args.length);
		}
	}

	@Override
	public void run() {
		Process pr = null;
		try {
			pr = startProcess();
		} catch (IOException e) {
			LOGGER.warn(String.format("Failed to start %s", args[0]), e);
			getOutputPane().append(
					String.format("Failed to start %s%n", args[0]));
			return;
		}
		OutputStream stdin = pr.getOutputStream();
		InputStream stderr = pr.getErrorStream();
		InputStream stdout = pr.getInputStream();
		try {

			StringBuilder builder = new StringBuilder();
			byte[] buffer = new byte[100];
			while (!Thread.interrupted()) {
				while (stderr.available() > 0) {
					int i = stderr.read(buffer);
					builder.append(new String(buffer, 0, i));
				}
				while (stdout.available() > 0) {
					int i = stderr.read(buffer);
					builder.append(new String(buffer, 0, i));
				}
				getOutputPane().append(builder.toString());
				if (builder.length() < 0)
				builder.delete(0, builder.length() - 1);
			}
		} catch (IOException ex) {
			getOutputPane().append("Unknown error occured.");
		}

	}

	@Override
	public void finished() {
		getOutputPane().append("Finished\n");

	}

	protected Process startProcess() throws IOException {
		File dir = null;
		if (Project.getActualProject() != null)
			dir = Project.getActualProject().getProjectDir();
		if (dir == null) {
			return Runtime.getRuntime().exec(args);
		} else {
			return Runtime.getRuntime().exec(args, null,
					Project.getActualProject().getProjectDir());
		}
	}

	protected OutputPane getOutputPane() {
		return ToolPane.getInstance().getOutput();
	}
}

Und schliesslich noch der Task Pool, der den Task ausführen soll:
Java:
package ch.forthedit.tasks;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

/**
 * 
 * @author Tim
 * 
 */
public class TaskPool extends Thread {
	/** The singleton instance */
	private static final TaskPool INSTANCE = new TaskPool();
	private final BlockingQueue<Task> tasks;

	/** The private constructor */
	private TaskPool() {
		super("TaskPool");
		tasks = new LinkedBlockingQueue<>();
	}

	/** Returns the singleton instance */
	public static TaskPool getInstance() {
		return INSTANCE;
	}

	public synchronized void addTask(Task t) {
		tasks.add(t);
		this.notifyAll();
	}

	@Override
	public void run() {
		super.run();
		while (!isInterrupted()) {
			Task t = tasks.peek();
			if (t == null) {
				try {
					synchronized (this) {
						this.wait();
					}
				} catch (InterruptedException e) {
					break;
				}
			} else {
				t.run();
				t.finished();
			}
		}
	}
}

Zudem bräuchte ich noch eine Lösung für die Schleife
Code:
while(!Thread.interrupted())
etwas wie
Code:
while(!process.finished())
 

Volvagia

Top Contributor
Grundsätzlich sind Blue Screens

1) Programmierfehler (in der VM oder Libs mit nativen Zeug)
2) Hardwaredefekte
3) Treiberkonflikte

Falls es sich nicht um einen bekannten Bug handelt solltest du vielleicht die Hardware scannen. Memtest86 z. B.
Der Inhalt des Blue Screens wäre aber wesentlich hilfreicher. Fehlermeldungen sollen Fehler melden.

Für die While hätte ich jetzt keine Lösung, aber es gibt waitFor. Vielleicht kannst du das damit über einen zusätzlichen Thread steuern.
 

Tiim

Mitglied
Vielen dank, ich werde das mit Memtest mal ausprobieren.
Beim Bluescreen habe ich leider keine Zeit, die Fehlermeldung abzuschreiben, da mein PC gleich darauf hin neu startet. Ausserdem würde ich es gerne vermeiden es erneut auszuprobieren, da ich Angst habe dass mein Windows dadurch kaputt geht (ist vielleicht unbegründet, aber wer weis..:autsch:)
 

Volvagia

Top Contributor
Ein Blue Screen ist nichts anderes als eine Exception/Error. Rechtsklick am Arbeitsplatz -> Eigenschaften -> Erweitert -> Starten und Wiederherstellen -> Automatischen Neustart durchführen deaktivieren. Kann sein, dass es unter Windows 6/6.1 leicht anderst heißt, denke aber dass es problemlos findbar ist.
 

Tiim

Mitglied
Ja, in der Tat sieht es unter Vista etwas anders aus. Ich habs jetzt aber geschaft, und werde euch gleich den Inhalt des Bluescreens posten.
 

Tiim

Mitglied
Es kommt ein Text, in dem steht, dass Windows herunterfahren musste und das ich ein Systemdiagnosetool rennen lassen soll. Darunter steht noch:

Technical information:
Code:
*** STOP: 0x0000007F (0x00000008, 0x8B54A130, 0x00000000, 0x00000000)

Zudem habe ich vorhin eingestellt, dass ein Memorydump (ist ein Abbild des Arbeitsspeichers,oder? ) erstellt wird. Soll ich dieses hier raufladen?
 

Volvagia

Top Contributor
Denke, dass das nicht nötig sein wird.

Ein Doppelfehler tritt auf, wenn während eines Aufrufs an den Handler für einen vorherigen Ausnahmefehler ein weiterer Ausnahmefehler auftritt. Normalerweise können zwei Ausnahmefehler seriell verarbeitet werden. Es gibt jedoch diverse Ausnahmefehler, die nicht seriell verarbeitet werden können. In dieser Situation meldet der Prozessor einen Doppelfehler. Die beiden Hauptursachen sind Hardwareprobleme und Kernelstapelüberläufe. Hardwareprobleme stehen in der Regel im Zusammenhang mit der CPU, dem RAM-Speicher oder dem Bus. Kernelstapelüberläufe werden fast immer durch fehlerhafte Kernelmodustreiber verursacht.

Ich tippe auf RAM, der ist es meistens bei Blue Screens. (Zumindest bei anderen, seltsamerweiße sind mir bis jetzt ausschließlich Kühler und Festplatten kaputt gegangen.)
Brenn mal Memtest86 und boote damit. Selbst sofern das nicht die Ursache sein sollte kann es nicht schaden zu schauen ob alles ok ist. :)
 

Tiim

Mitglied
So, ich hab das mit Memtest hab ich jetzt probiert und das wollte nach 4h nicht enden, desshalb habe ich es abgebrochen. Bis dahin hat es jedoch keine Fehler gefunden.

Der Bluescreen ist jedoch nicht vom Runtime.exec() sondern kommt auch wenn ich in der Task Klasse eine run-methode hab, die nur ein System.out.println() enthält. Dieser Text wird jedoch nicht nur einmahl angezeigt wie es eigentlich sein sollte, sondern unzählige male, bis es wieder zu einem Bluescreen kommt.

Ich hatte bei meinem Computer noch nie einen Bluescreen oder ähnliches, doch mit meinem Programm ist er reproduzierbar. Vieleicht kann ich das Programm heute auf einem anderen Computer testen, mal schauen was dann passiert.
 

Tiim

Mitglied
So, ich habe es gefixt. Ich musste die Zeile
Code:
tasks.peek();
durch
Code:
tasks.poll();
ersetzen, da .peek() den Eintrag nicht entfernt. Und dadurch die run Methode vom Task wiederhohlt aufruft. Wieso das aber zum BS geführt hat weiss ich nicht.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Registry Autostart Eintrag ertstellen mit Java (Runtime.getRuntime().exec()) Allgemeine Java-Themen 0
M this application requires a java runtime environment 1.8.0 Allgemeine Java-Themen 2
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
J Verschiedene Runtime Versionen gleichzeitig? Allgemeine Java-Themen 12
K Threads Runtime und Process Probleme Allgemeine Java-Themen 3
H Runtime reagiert erst wenn Programm abbricht Allgemeine Java-Themen 1
J Probleme mit der Java-Runtime Allgemeine Java-Themen 10
M Runtime.exec() verursacht auf manchen Systemen Probleme - Ursache unklar Allgemeine Java-Themen 2
S Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC Allgemeine Java-Themen 3
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
Thallius Runtime.getRuntime().exec " escapen? Allgemeine Java-Themen 9
W Threads Mit Thread und Runtime externe Programme öffnen Allgemeine Java-Themen 0
C Runtime Problem Allgemeine Java-Themen 1
P programm öffnen mit der runtime Allgemeine Java-Themen 9
N Runtime.getRuntime().exec Problem mit find Allgemeine Java-Themen 3
W JavaDoc Runtime-Exceptions: Wie sinnvoll anzeigen? Allgemeine Java-Themen 14
P Runtime bzw. RAM-Auslastung eines Prozesses Allgemeine Java-Themen 9
M Befehl in Runtime ausführen der Eingabe benötigt Allgemeine Java-Themen 3
aze Jar ausführen über Runtime.execute funktioniert nicht Allgemeine Java-Themen 4
I Runtime.getRuntime().exec Problem Allgemeine Java-Themen 4
G Runtime.exec beendet Programm unter Linux, wenn Java Programm beendet wird Allgemeine Java-Themen 3
N Runtime.exec() Exception Problem Allgemeine Java-Themen 3
N Runtime.exec() Allgemeine Java-Themen 7
S Runtime Exceptions in eine Datei schreiben Allgemeine Java-Themen 7
N Internet Explorer mit bestimter Java Runtime starten Allgemeine Java-Themen 2
truesoul Runtime.getRuntime().exec nebenbei ausführen Allgemeine Java-Themen 12
S Runtime.getRuntime()... Allgemeine Java-Themen 6
Z Runtime.getRuntime().exec-Problem Allgemeine Java-Themen 4
J Runtime.exec setzt Fokus auf Frame Allgemeine Java-Themen 2
V Probleme mit Runtime.exec() Allgemeine Java-Themen 3
M Runtime.exec() - Performance / Frage zu Threads Allgemeine Java-Themen 5
S Rückgabewert runtime Allgemeine Java-Themen 11
M Runtime.getRuntime().exec(cmd); auf windows ... Allgemeine Java-Themen 2
martin82 Java Runtime Update >17 - SwingWorker Änderungen? Allgemeine Java-Themen 7
T Runtime.exec() Allgemeine Java-Themen 3
X Wann ist Runtime.getRuntime().exec mit Copy fertig? Allgemeine Java-Themen 10
W java ohne runtime Allgemeine Java-Themen 2
G Output eines über Runtime.getRuntime.exec gestarteten Jars Allgemeine Java-Themen 6
N runtime.exec() Problem Allgemeine Java-Themen 6
W Runtime.getRuntime().exec() Allgemeine Java-Themen 10
lordcarlos Runtime exec und mplayer (linux) Allgemeine Java-Themen 11
C JApplet und Runtime.getRuntime().exec() Allgemeine Java-Themen 2
K Runtime.exec mit Timeout Allgemeine Java-Themen 5
0 Runtime.exec() VLC starten klappt nicht Allgemeine Java-Themen 9
G Runtime.exec - Prozess "mittendrin" "einfach Allgemeine Java-Themen 4
G Runtime? Allgemeine Java-Themen 3
J Runtime.exec unter win vista? Allgemeine Java-Themen 10
M Probleme Runtime.getRuntime().exec(Start.cmd); Allgemeine Java-Themen 10
F Problem mit Runtime.exec() Allgemeine Java-Themen 8
S Problem mit Runtime. Allgemeine Java-Themen 2
E Programm mit der Runtime ausführen Allgemeine Java-Themen 8
M Runtime & Exception Allgemeine Java-Themen 3
J ServiceInterface - Runtime() > jemand eine idee? Allgemeine Java-Themen 2
A Runtime oder ProcessBuilder exe starten Allgemeine Java-Themen 3
V Java-Programm vom USB-Stick ohne Runtime-Installation Allgemeine Java-Themen 18
W In Runtime Output schreiben Allgemeine Java-Themen 5
J Probiert mal bitte aus (Thread + Runtime) Allgemeine Java-Themen 10
A Installierte Runtime ermitteln Allgemeine Java-Themen 3
M Runtime.exec unter Vista (Administrator Rechte) Allgemeine Java-Themen 2
K Probleme mit Runtime.getRuntime().exec Allgemeine Java-Themen 6
T ausführbares jar File mit integriertem Java Runtime 6+JOGL Allgemeine Java-Themen 7
A Runtime.getRuntime().exec mit Warte auf Beendigung - Wie? Allgemeine Java-Themen 7
R Problem mit Runtime.getRuntime().exec() Allgemeine Java-Themen 4
the[V]oid Ausführen von "javac" über Runtime.exec() Allgemeine Java-Themen 4
W Runtime Error216 Runtime error 217 Allgemeine Java-Themen 6
B Runtime Verzeichniss wechseln Allgemeine Java-Themen 8
C Java SE Runtime 6 Update 1 - IE 7 und FF 2.0 - Allgemeine Java-Themen 6
F Runtime.getRuntime().exec mit Linux und Leerzeichen Allgemeine Java-Themen 3
D runtime.exec --> Prozess hängt sich auf Allgemeine Java-Themen 7
T Runtime.exec -> Prozesskontrolle abgeben ? Allgemeine Java-Themen 11
B Probleme mit Runtime.getRuntime().exec("cmd.exe") Allgemeine Java-Themen 4
M Runtime.getRuntime().exec(txt_rsync_option.getText()); Allgemeine Java-Themen 12
M Rückgabewert von Runtime.getRuntime().exec() Allgemeine Java-Themen 2
G Programm wird von java cmd runtime nicht aufgerufen? Allgemeine Java-Themen 13
S Runtime.exec() berechtigungen Allgemeine Java-Themen 5
S Runtime.exec und X Umgebung Allgemeine Java-Themen 2
A Runtime Process bricht nicht ab! Allgemeine Java-Themen 7
F Shell-Programme per Runtime.exec() starten und mehr? Allgemeine Java-Themen 4
K Runtime.exec und DFÜ-Verbindung Allgemeine Java-Themen 5
C Rechte unter WinXP, MySQL-Server per Runtime herunterfahren? Allgemeine Java-Themen 6
P Copy mit Runtime.exec() unter Unix Allgemeine Java-Themen 4
D Problem mit Runtime.getRuntime().exec() Allgemeine Java-Themen 14
L Runtime.getRuntime.exec() Allgemeine Java-Themen 7
T Probleme mit Runtime.exec in Jar File Allgemeine Java-Themen 2
M Runtime.exec unter Linux Allgemeine Java-Themen 11
G Java Runtime Verzeichnis ermitteln Allgemeine Java-Themen 3
X Problem mit Runtime.getRuntime().exec("cls"); Allgemeine Java-Themen 18
S Runtime.getRunTime().exec("jar cvf .) hängt sich auf Allgemeine Java-Themen 3
9 J2SE Runtime Environment 5.0 Allgemeine Java-Themen 6
M Runtime.getRuntime().exec() - Fehler abfangen Allgemeine Java-Themen 5
S Runtime exec unter MacOS X will nicht "open pfad" Allgemeine Java-Themen 7
S dvbscan mit Runtime.getInstance().exec() ausführen ? Allgemeine Java-Themen 24
B Problem mit Runtime.getRuntime().exec() Allgemeine Java-Themen 4
G Runtime.getRuntime() Allgemeine Java-Themen 10
G Runtime.getRuntime().exec("cmd /c START") Allgemeine Java-Themen 3
M Runtime.exec() => java.io.exception: too many open files Allgemeine Java-Themen 10
S Programm starten mit Runtime aktuelles Verzeichnis wechseln Allgemeine Java-Themen 7
M exec() funktioniert nicht Allgemeine Java-Themen 1
R Exec. Jar läd Bilder nicht! Allgemeine Java-Themen 5
S exec( "cmd /c") aber Konsole soll offen bleiben Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben