Grafik abspeichern, X11 Fehlermeldung

Status
Nicht offen für weitere Antworten.

kieltz

Mitglied
Hallo,
folgendes Problem: Ich habe mein Programm in eclipse unter Windows gebaut. da es sehr viel Zeit in Anspruch nimmt, soll es jetzt auf einem Linux-Cluster gerechnet werden. Eigentlich läuft alles ganz gut, aber ich bekomme beim Erstellen einer Grafik zum Abspeichern folgende Fehlermeldung:

Exception in thread "main" java.awt.HeadlessException
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
at java.awt.Window.<init>(Window.java:406)
at java.awt.Frame.<init>(Frame.java:402)
at helpFunctions.Grafik.<init>(Grafik.java:36)
at helpFunctions.Output.saveImage(Output.java:302)
at realObjects.Farmer.dynamics(Farmer.java:1216)
at runpackage.InitRapecrossing.<init>(InitRapecrossing.java:103)
at runpackage.InitRapecrossing.main(InitRapecrossing.java:132)

Die Grafik soll ganrnicht angezeigt, sondern nur abgespeichert werden. Aber dazu muss ich ja praktisch im Hintergrund eine Grafik bauen. Hier ist der Grafikcode aus class Output

Code:
public void saveImage(String path, boolean real, boolean small) {

		Grafik hop = new Grafik(real, small);  
		
		BufferedImage image = new BufferedImage(hop.getWidth(),
				hop.getHeight(), BufferedImage.TYPE_INT_RGB);
		Graphics g = image.getGraphics();
		hop.paint(g);

		try {
			ImageIO.write(image, "jpeg", new File(path));
		} catch (IOException e1) {
			// TODO Automatisch erstellter Catch-Block
			e1.printStackTrace();
		}
	}
Fehlermeldung in Zeile: Grafik hop = new Grafik(real, small); ((Output.java:302))

und hier die aufgerufene Klasse Grafik

Code:
public Grafik(boolean landscape, boolean kleinreal) {
		super("Landscape");
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		setSize(n * cellsize + moveFactor, n * cellsize + moveFactor + 10);
		this.landscape = landscape;
		this.kleinreal = kleinreal;
	}

Fehlermeldung in super("Landscape"); (Grafik.java:36)

Kann mir jemand einen Hinweis geben, wie ich diese Fehlermeldung umgehen und die Grafik dennoch abspeichern kann?

Ganz vielen Dank

Jörg
 

Wildcard

Top Contributor
Wenn du dich in einer headless Umgebung befindest musst du das Java auch mitteilen.
Starte die VM mit dem -Djava.awt.headless=true Parameter.
 

kieltz

Mitglied
Hallo Wildcard,
danke. Aber so richtig funktioniert es noch nicht. Kann es daran liegen, dass ich das Programm als jar-File starte? Hier mein Aufruf im Batch-File:

java -jar -Djava.awt.headless=true RC_Test01.jar


Ist das so richtig geschrieben?

Jörg
 

kieltz

Mitglied
Das geht doch so, oder? Leider kommt die gleiche Fehlermeldung immer noch!

Code:
public Grafik (boolean landscape, boolean kleinreal) throws HeadlessException  {
		super("Landscape");
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		setSize(n * cellsize + moveFactor, n * cellsize + moveFactor + 10);
		this.landscape = landscape;
		this.kleinreal = kleinreal;
	}

Oder muss ich die HeadlessException noch an ein paar mehr Stellen setzen?[/quote]
 

Wildcard

Top Contributor
Ich dachte dir geht es um eine Grafik, warum instanzierst du ein Fenster in einer Headless Environment? ???:L
 

kieltz

Mitglied
Nun, weil es um Anfängerfragen hier geht. Und da gehöre ich offensichtlich rein! :oops:

Also: In meinem ersten Beitrag siehst du eine Funktion saveImage, die erzeugt ein Bild mittels dieser Funktion Grafik, die im letzten und ersten Beitrag zu sehen ist.

Also sollten wir das Problem wohl anders lösen. Wie kann ich denn eine Grafik zum Abspeichern erzeugen ohne ein Fenster zu instanzieren??
 

JPKI

Top Contributor
Die Grafik kannst du doch auch ohne Fenster speichern ???:L :
Code:
BufferedImage image = new BufferedImage(parametergedöns);
paint(image.getGraphics()); //In paint die Graphics-Operationen realisieren
//dann in Datei schreiben
 

kieltz

Mitglied
naja, ich komme jetzt wahrscheinlich gleich ins Stottern, aber es liegt an meiner Unkenntnis und ist pfadabhängig.

Ich habe mir die Ergebnisausgabe meines Programms so eingestellt, dass ich entweder die Grafik zur Laufzeit angezeigt und immer wieder erneuert bekomme oder aber das die Grafik zu dem jweiligem Zeitpunkt abgespeichert wird. Und dafür funktioniert der Befehl saveImage, der in meinem ersten Beitrag steht, unter Windows eigentlich vorzüglich und hat bisher nicht zu einem Fehler geführt. Ich werde den Spaß mal ein bißhchen umprogrammieren und sehen, was dabei herauskommt!
 

kieltz

Mitglied
Ok, probiert und gescheitert.

In diesem Codeabschnitt benutze ich bereits ungefähr das, was JPKI vorgeschlagen hat:

Code:
public void saveImage(String path, boolean real, boolean kleinreal) {

		Grafik hop = new Grafik(real, kleinreal);
		// hop.setVisible(true);
		BufferedImage image = new BufferedImage(hop.getWidth(),
				hop.getHeight(), BufferedImage.TYPE_INT_RGB);
		Graphics g = image.getGraphics();
		hop.paint(g);

		try {
			ImageIO.write(image, "jpeg", new File(path));
		} catch (IOException e1) {
			// TODO Automatisch erstellter Catch-Block
			e1.printStackTrace();
		}


Und aus Grafik habe ich jetzt zumindest alles, was ich als Fensteraufruf kenne, rausgenommen:

Code:
public class Grafik extends Frame {

	Input newInput2 = new Input();

	String zeileLi;

	
	static int moveFactor = 40;

	static int cellsize;
	{
		if (InitRapecrossing.celllist.length == 36) {
			cellsize = 50;
		} else
			cellsize = 10;
	}

	int n = (int) Math.sqrt(InitRapecrossing.celllist.length);

	Color darkgreen = new Color(0f,0.65f,0.35f);
	private boolean landscape;
	private boolean kleinreal;
	public Grafik (boolean landscape, boolean kleinreal) throws HeadlessException  {
		
		this.landscape = landscape;
		this.kleinreal = kleinreal;
	}

	
	public void paint(Graphics g) {

		

		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if (InitRapecrossing.celllist[j * n + i].getCroppingC() == 0) {
					g.setColor(Color.red);
					g.fillRect((i * cellsize) + (moveFactor / 2), j * cellsize
							+ moveFactor, cellsize, cellsize);
				}
				if (InitRapecrossing.celllist[j * n + i].getCroppingC() == 1) {
					g.setColor(Color.yellow);
					g.fillRect(i * cellsize + (moveFactor / 2), j * cellsize
							+ moveFactor, cellsize, cellsize);
				}
				if (InitRapecrossing.celllist[j * n + i].getCroppingC() == 2) {
					g.setColor(Color.green);
					g.fillRect(i * cellsize + (moveFactor / 2), j * cellsize
							+ moveFactor, cellsize, cellsize);
				}
				if (InitRapecrossing.celllist[j * n + i].getCroppingC() == 3) { // color
																				// for
																				// City,
																				// villages
					g.setColor(Color.gray);
					g.fillRect(i * cellsize + (moveFactor / 2), j * cellsize
							+ moveFactor, cellsize, cellsize);
				}
				if (InitRapecrossing.celllist[j * n + i].getCroppingC() == 4) { // color
																				// for
																				// hedges,
																				// forest
					g.setColor(darkgreen);
					g.fillRect(i * cellsize + (moveFactor / 2), j * cellsize
							+ moveFactor, cellsize, cellsize);
				}
				if (InitRapecrossing.celllist[j * n + i].getCroppingC() == 5) { // color
																				// for
																				// water
					g.setColor(Color.blue);
					g.fillRect(i * cellsize + (moveFactor / 2), j * cellsize
							+ moveFactor, cellsize, cellsize);
				}
			}
		}

Ich stehe echt auf dem Schlauch, aber da wird doch nichts fenstermäßiges aufgerufen? Wo kommt diese blöde headless-Fehlermeldung her?
 

Wildcard

Top Contributor
Und dafür funktioniert der Befehl saveImage, der in meinem ersten Beitrag steht, unter Windows eigentlich vorzüglich und hat bisher nicht zu einem Fehler geführt
Die Methode hat ja auch nichts mit einem Fenster zu tun, insofern sehe ich immer noch nicht wozu das Fenster da ist ???:L
Falls dir noch nicht so wirklich klar ist warum es auf deinem Windows Rechner läuft und auf dem Linux Cluster nicht:
Auf dem Linux läuft vermutlich kein X-Server, also keine grafische Oberfläche.
Ohne grafische Oberfläche wird es mit GUI-Widgets natürlich schwierig, denn wo sollen sie angezeigt werden :wink:
 

kieltz

Mitglied
Das ist mit Sicherheit so, aber ich bekomme ja mittlerweile auch keine x11 Fehlermeldung, sondern eine headlessexception-Fehlermeldung.

Man muss doch irgendwie eine Grafik abspeichern können? Meint ihr, dass geht generell nicht oder liegt das an irgendeinem verstecktem Fenster?
 

Wildcard

Top Contributor
kieltz hat gesagt.:
Man muss doch irgendwie eine Grafik abspeichern können? Meint ihr, dass geht generell nicht oder liegt das an irgendeinem verstecktem Fenster?
Du hast da ein extends Frame, das Fenster ist also alles andere als versteckt.
 

kieltz

Mitglied
Hey Wildcard, ich kenn mich eben nicht so gut aus, aber jetzt kommts:

ES KLAPPT. Es läuft durch wie nichts gutes! :D :D

Also, vielen Dank! Solltest du aus Norddeutschland und zur Kieler Woche kommen, müssen wir zusammen ein Bier trinken ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
fragenÜber(fragen); Turtle Grafik mit GUI (JFrame) Java Basics - Anfänger-Themen 3
D Grafik auf ein JPane ausgeben. Java Basics - Anfänger-Themen 6
J Konstruktoren und Grafik Java Basics - Anfänger-Themen 3
J "Tetris" - Problem bei der Grafik Java Basics - Anfänger-Themen 5
R Grafik in CSV einbinden Java Basics - Anfänger-Themen 2
S Suche aktuelles 2D Grafik Tutorial Java Basics - Anfänger-Themen 5
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
D aufbauende Grafik Java Basics - Anfänger-Themen 13
8 Grafik erstellen Java Basics - Anfänger-Themen 6
Z Jump and Run - Grafik,Logik und GUI trennen Java Basics - Anfänger-Themen 4
G Bei Mouseover Grafik ändern, gutes Vorgehen gesucht Java Basics - Anfänger-Themen 0
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
L Grafik Kollision Detektierung Java Basics - Anfänger-Themen 4
L OOP Grafik in Circle Objekt füllen Java Basics - Anfänger-Themen 3
S Grafik löschen Java Basics - Anfänger-Themen 10
C Grafik einsperren Java Basics - Anfänger-Themen 2
E Quelltext für Grafik verschwindet Java Basics - Anfänger-Themen 9
S Grafik verschwindet Java Basics - Anfänger-Themen 8
O Java Grafik-Programmierung? Java Basics - Anfänger-Themen 16
R 2D Grafik zeichnen Java Basics - Anfänger-Themen 4
B Grafik zeichnen Java Basics - Anfänger-Themen 25
S Teilstücke aus einer Grafik extrahieren Java Basics - Anfänger-Themen 2
Maxim6394 Grafik rotieren Java Basics - Anfänger-Themen 11
S Probleme mit JMenü und Grafik Java Basics - Anfänger-Themen 2
0 Grafik eine bestimmte Strecke laufen lassen Java Basics - Anfänger-Themen 6
R Hilfe bei erster Grafik Java Basics - Anfänger-Themen 2
A Gui Grafik Java Basics - Anfänger-Themen 4
maddin86 Grafik in .jar einbetten Java Basics - Anfänger-Themen 3
M import einer Grafik aus .jar funktioniert nicht Java Basics - Anfänger-Themen 6
M Grafik export in ein Jar File Java Basics - Anfänger-Themen 5
O Grafik in Frame laden Java Basics - Anfänger-Themen 9
H Diverse Dinge: Unstabile Grafik, Druckt Grafik nicht,Tooltipp verschwindet hinter Grafik Java Basics - Anfänger-Themen 3
H Grafik auf einem JPanel bewegen. Java Basics - Anfänger-Themen 7
F JLabel mit Grafik füllen Java Basics - Anfänger-Themen 3
K Grafik vergrößern/verkleinern Java Basics - Anfänger-Themen 3
F Zugriffsproblem - Funktion von Grafik trennen Java Basics - Anfänger-Themen 6
H HtmlUnit - Grafik speichern Java Basics - Anfänger-Themen 2
R Taste gedrückt = Grafik zeichen ?!? Java Basics - Anfänger-Themen 8
D PNG-Grafik erzeugen Java Basics - Anfänger-Themen 8
A Grafik erstellen und in Frame einfügen Java Basics - Anfänger-Themen 17
T Drucken von Listen bestehend aus Grafik und Text (unter swing) Java Basics - Anfänger-Themen 7
A grafik 2d Objekte mit der Maus bewegen Java Basics - Anfänger-Themen 4
A Grafik 2d Objekte farblich ausfüllen Java Basics - Anfänger-Themen 15
C Grafik einbinden Java Basics - Anfänger-Themen 11
F Größe von Grafik-Containern verschieben Java Basics - Anfänger-Themen 2
J Unterschied zwischen 2 Grafik Methoden Java Basics - Anfänger-Themen 2
M Grafik neuzeichnen Java Basics - Anfänger-Themen 8
M Grafik als Resource laden? Java Basics - Anfänger-Themen 2
G erste Schritte in Fenster und Grafik-Programmierung Java Basics - Anfänger-Themen 2
$ Inhalt von JPanel als Grafik? Java Basics - Anfänger-Themen 2
K Grafik beim JFrame oben Links ändern nur wie ? Java Basics - Anfänger-Themen 8
J Grafik Java Basics - Anfänger-Themen 3
T Zeigerposition auf Grafik messen? Java Basics - Anfänger-Themen 5
M ausm String eine Grafik erstellen Java Basics - Anfänger-Themen 4
F Grafik auf Button passt nicht Java Basics - Anfänger-Themen 1
E Grafik in bestimmtes frame einbinden . Java Basics - Anfänger-Themen 13
F Teilen einer großen Grafik Java Basics - Anfänger-Themen 2
M Grafik erstellen Java Basics - Anfänger-Themen 8
C Clear im Grafik Editor Java Basics - Anfänger-Themen 16
C Grafik flimmert bzw. flackert bei Bewegung Java Basics - Anfänger-Themen 11
N Grafik formatieren Java Basics - Anfänger-Themen 7
E fehlermeldung bei rekursiver grafik Java Basics - Anfänger-Themen 11
M wie kombiniere ich grafik und swing-komponenten Java Basics - Anfänger-Themen 16
N Java Problem bei Grafik und OoP Java Basics - Anfänger-Themen 7
V Grafik ist nur ganz kurz sichtbar Java Basics - Anfänger-Themen 3
H Streichholzziehen - Grafik? Java Basics - Anfänger-Themen 3
M Grafik auf einem JPanel erneut darstellen Java Basics - Anfänger-Themen 3
S Grafik verschwindet aus JTabbedPane Java Basics - Anfänger-Themen 4
C Grafik in einem Panel als Bild exportieren Java Basics - Anfänger-Themen 8
D Datentypen Wie am Besten abspeichern Java Basics - Anfänger-Themen 1
T Unterschiedliche Datentypen - worin abspeichern? Java Basics - Anfänger-Themen 18
R Text in der DB abspeichern, und danach bearbeiten Java Basics - Anfänger-Themen 5
izoards Textdatei Human unreadable abspeichern Java Basics - Anfänger-Themen 17
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
P Enums in Array abspeichern Java Basics - Anfänger-Themen 4
D Collections Arrays in ArrayList abspeichern Java Basics - Anfänger-Themen 6
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
S Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren Java Basics - Anfänger-Themen 16
R Benutzereingaben als Array abspeichern nach Programmstart Java Basics - Anfänger-Themen 5
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
N Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams Java Basics - Anfänger-Themen 9
A Eingelesene Daten in Array(Liste) abspeichern? Java Basics - Anfänger-Themen 18
B Zahl in String abspeichern und später berechnen Java Basics - Anfänger-Themen 15
x-tshainge Konsoleneingabe in datei Abspeichern Java Basics - Anfänger-Themen 3
B Methoden Konsoleneingabe Abspeichern Java Basics - Anfänger-Themen 3
M Netbeans Projekt lauffähig abspeichern Java Basics - Anfänger-Themen 3
M In Netbeans Programm so abspeichern dass es funktioniert Java Basics - Anfänger-Themen 8
E Erste Schritte txt.Datei mit BufferedReader einlesen und in 2D-Array abspeichern Java Basics - Anfänger-Themen 15
D InputStream parsen und als Bilddatei abspeichern Java Basics - Anfänger-Themen 1
V Datentypen Richtiges Format abspeichern Java Basics - Anfänger-Themen 13
R Eine Arrayliste in XML abspeichern und laden können Java Basics - Anfänger-Themen 7
C Datentypen Zeile aus mehrdimensionalem Array extrahieren uns abspeichern Java Basics - Anfänger-Themen 6
I google java-diff-util - Patch abspeichern Java Basics - Anfänger-Themen 1
B Quellcode einelsen "line by line" (und abspeichern in file (txt) Java Basics - Anfänger-Themen 7
A JFreeChart als png abspeichern Java Basics - Anfänger-Themen 2
J Werte der For-Schleife in Array abspeichern Java Basics - Anfänger-Themen 1
F Textdatei einlesen in ArryList (Objekte abspeichern?) Java Basics - Anfänger-Themen 4
K Inhalt von einer csv-Datei abspeichern Java Basics - Anfänger-Themen 3
M Riesige Zahlen abspeichern Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben