Klassen StackOverflow bei erster Nutzung von Klassen/Konstruktoren

Cashney

Mitglied
Hallo Forum!

Ich beschäftige mich im Studium seit ca. 2 Monaten mit Java-Programmierung. Jetzt bin ich zum ersten Mal in ein Problem gelaufen, dass ich nicht selbst per Google und JavaDoc-Recherche lösen konnte.

Aufgabe ist, eine Klasse zu schreiben ähnlich der Color-Klasse, die in java.awt.* bereits vorhanden ist. Ergo ein paar Konstruktoren die mit entsprechender Wertübergabe eine neue Farbe erstellen und Methoden zum auslesen derselben zur Verfügung stellen.

Das Thema ist mir bisher erst grundlegend vertraut, wenn hier zu viel im argen liegt werde ich gerne nochmal etwas lesen, aber wenn es doch nur ein kleiner Fehler ist hätte ich gern ein bisschen Anregung wo es denn genau hapert. Habe per Debug schon versucht den Fehler einzugrenzen, allerdings komm ich da nicht weiter weil jeder 2te Schritt zu "Source not found." führt. Warum weiß ich nicht... Hatte das aber schonmal mit einem anderen Programm bei dem eigentlich alles in Ordnung war.

Java:
public final class Color {

	// Klassenattribute
	private float alpha;
	private float red;
	private float green;
	private float blue;
	
	// Konstantendeklaration
	final Color BLACK = new Color(0,0,0);
	final Color WHITE = new Color(255,255,255);
	final Color ORANGE = new Color(255, 165, 0);
	final Color RED = new Color(255,0,0);
	final Color BLUE = new Color(0,0,255);
	final Color GREEN = new Color(0,255,0);
	
	// Konstruktoren
	public Color(float r, float g, float b, float a){
		alpha = a;
		red = r;
		green = g;
		blue = b;
		}
	public Color(float r, float g, float b){
		alpha = 1;
		red = r;
		green = g;
		blue = b;
		}
	public Color(int r, int g, int b, int a){
		alpha = (float)a / 255;
		red = (float)r / 255;
		green = (float)g / 255;
		blue = (float)b / 255;
		}
	public Color(int r, int g, int b){
		alpha = 1;
		red = (float)r / 255;
		green = (float)g / 255;
		blue = (float)b / 255;
		}
	
	public Color(int argb){
		int b = argb & 255;
		argb = argb >>> 8;
		int g = argb & 255;
		argb = argb >>> 8;
		int r = argb & 255;
		argb = argb >>> 8;
		int a = argb & 255;
		setColor(r,g,b,a);
		}
	public Color(Color color){
		float a = color.getAlpha();
		float r = color.getRed();
		float g = color.getGreen();
		float b = color.getBlue();
		setColor(r,g,b,a);
		}
	
	// Getter-Methoden
	public float getAlpha(){
		return alpha;
		}
	public float getRed(){
		return red;
		}
	public float getGreen(){
		return green;
		}
	public float getBlue(){
		return blue;
		}
	public int getARGBColor(){
		int result = 0;
		result = (int)(alpha * 255);
		result = result << 8;
		result += (int)(red * 255);
		result = result << 8;
		result += (int)(green * 255);
		result = result << 8;
		result += (int)(blue * 255);				
		return result;
	}
	
	public String getColor(String color){
		if(color.equalsIgnoreCase("BLACK")){
			return "BLACK";
		}else if(color.equalsIgnoreCase("WHITE")){
			return "WHITE";
		}else if(color.equalsIgnoreCase("ORANGE")){
			return "ORANGE";
		}else if(color.equalsIgnoreCase("RED")){
			return "RED";
		}else if(color.equalsIgnoreCase("GREEN")){
			return "GREEN";
		}else if(color.equalsIgnoreCase("BLUE")){
			return "BLUE";
		}else{
			return "null";
		}
	}
	// Setter-Methoden
	private void setColor(float r, float g, float b, float a){
		if((a>=0&&a<=1)&&(r>=0&&r<=1)&&(g>=0&&g<=1)&&(b>=0&&b<=1)){
			alpha = a;
			red = r;
			green = g;
			blue = b;
			}else{
				System.out.println("Parameter richtig eingeben...");
				}
		}
	private void setColor(int r, int g, int b, int a){
		float alpha = ((float)a)/255;
		float red = ((float)r)/255;
		float green = ((float)g)/255;
		float blue = ((float)b)/255;
		setColor(alpha, red, green, blue);
		}

	// To String Methode
	public String toString(){
		// Werte von 0,1 auf 0,255 umrechnen fehlt noch
		String output = ("Color(red = " + red + ", green = " + green + ", blue = " + blue + ", alpha = "+ alpha + ")");
		return output;
	}

	public static void main(String[] args){
		Color neueFarbe = new Color(0,206,209);
		System.out.println(neueFarbe.getBlue());
	}
	
}

Fehlermeldung in der Konsole ist wie folgt:
Exception in thread "main" java.lang.StackOverflowError
at Color.<init>(Color.java:36)
at Color.<init>(Color.java:10)
at Color.<init>(Color.java:10)
at Color.<init>(Color.java:10)
at Color.<init>(Color.java:10)
at Color.<init>(Color.java:10)
[...]

Danke schonmal für etwaige Vorschläge! Wenn ihr noch Infos braucht, einfach nachfragen, arbeite auf Windows 7 mit Eclipse, das folgende UML-Klassendiagramm war uns gegeben:



Mit freundlichen Grüßen
Cashney
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Das kommt weil deine Klasse so heißt wie eine aus der Java Bibliothek :)
Schau dir mal die Zeile 10 an:

final Color BLACK = new Color(0,0,0);

hier willst du sicherlich das Color aus der Java Bibliothek nutzen und nicht deine eigene richtig? Tust du hier aber nicht, sondern du erstellst ein Objekt deiner eigenen Klasse, da dort wiederum dann Zeile 10 uausgefphrt wird, erstellst du wieder ein Objekt deiner eigenen Klasse usw....es kommt eben zu einem StackOverflow.
Probiere es mit
Java:
    final java.awt.Color BLACK = new java.awt.Color(0, 0, 0);
//oder
final java.awt.Color BLACK = java.awt.Color.BLACK;
(gilt auch für die darunter liegenden)
Oder besser: Benne deine Klasse um, dann gibt es hier keine Probleme :)
 

Cashney

Mitglied
Dankeschön!

Warum das zu einem StackOverflow führt ist mir jetzt klar. Tatsache ist aber, dass wir NICHT die Java-vorgefertigte Klasse nutzen sollen, sondern explizit die RGB-Werte festlegen sollten. Macht natürlich keinen Sinn hier ein neues Objekt meiner eigenen Klasse zu machen weil das in eine Endlosschleife läuft, verstehe ich! Aber ohne die Java.awt.*?
Werden genau die RGB-Werte die in diesen Konstanten festgelegt sind beim Erstellen eines neuen Objekts übergeben soll die Klasse in der Lage sein den Namen der Farbe zurückzugeben. [JAVA=86] public String getColor(String color){[/code]
 

Cashney

Mitglied
Stimmt, habe da etwas herumexperimentiert und vergessen wieder aufs ursprüngliche zu setzen weil auch andere Prefixe nicht geholfen haben :p
 

Cashney

Mitglied
Ich habe zwischenzeitlich mal den obigen Vorschlag ausprobiert und mit Nutzung von java.awt.Color klappt das ganze. Sollte es aber nicht auch klappen wenn ich die Definition der Konstanten einfach weiter unten ins Programm setze? Also nicht als erstes bei Aufruf sondern hinter/unter die ganzen Konstruktoren und Setter und Getter Methoden? Habe es ausprobiert und es funktioniert, aber kann es da Probleme geben bzw. ist das "unsauber" / "unschön" oder dergleichen? Diese Definition der Klassenkonstanten als Objekt der Klasse selbst?
 

TKausL

Top Contributor
Ich habe zwischenzeitlich mal den obigen Vorschlag ausprobiert und mit Nutzung von java.awt.Color klappt das ganze. Sollte es aber nicht auch klappen wenn ich die Definition der Konstanten einfach weiter unten ins Programm setze? Also nicht als erstes bei Aufruf sondern hinter/unter die ganzen Konstruktoren und Setter und Getter Methoden? Habe es ausprobiert und es funktioniert, aber kann es da Probleme geben bzw. ist das "unsauber" / "unschön" oder dergleichen? Diese Definition der Klassenkonstanten als Objekt der Klasse selbst?

WO du die Konstanten hinsetzt ist völlig wurscht. Der Fehler kam nicht dadurch, dass sie ganz oben standen, sondern dadurch dass sie nicht static waren...
 

Cashney

Mitglied
Oh mann, dankeschön!

Dann lags ja im Endeffekt doch nur am static vs. final, schön doof weil ichs eigentlich wusste aber irgendwo zuviel herumexperimentiert habe und dann hats nicht funktioniert.

Herzlichen Dank, ihr seids die Besten ;) :toll:
 

TKausL

Top Contributor
Oh mann, dankeschön!

Dann lags ja im Endeffekt doch nur am static vs. final, schön doof weil ichs eigentlich wusste aber irgendwo zuviel herumexperimentiert habe und dann hats nicht funktioniert.

Herzlichen Dank, ihr seids die Besten ;) :toll:

static vs. final?
Final und Static sind zwei komlett unterschiedliche Keywords die sich gegenseitig nicht ausschließen.

Konstanten sind im normalfall
Java:
public static final Color BLACK = new Color();
 

Cashney

Mitglied
Dass die sich nicht ausschließen ist schon klar, wollte damit eher zum Ausdruck bringen dass ich ein bisschen herumprobiert habe.
Das final keyword habe ich auch begriffen, was static GENAU bedeutet ist mir nicht 100%ig klar, aber das kann ich auch anderswo finden, dafür müsst ihr euch jetzt hier nicht die Finger wund tippen, wenns denn doch dazu nochmal fragen gibt melde ich mich hier schon ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C StackOverflow bei Rekursion Java Basics - Anfänger-Themen 7
K MergeSort Stackoverflow Java Basics - Anfänger-Themen 5
P Compiler-Fehler StackOverFlow Java Basics - Anfänger-Themen 4
M StackOverflow Problem Java Basics - Anfänger-Themen 9
F Stackoverflow bei Quicksort Java Basics - Anfänger-Themen 2
L StackOverFlow, finde Grund nicht! Java Basics - Anfänger-Themen 5
O StackOverflow für Eingabewerte berechnen Java Basics - Anfänger-Themen 3
J Stackoverflow-Abbruchbedingung Java Basics - Anfänger-Themen 7
G StackOverflow Fehler Java Basics - Anfänger-Themen 3
Y stackoverflow fehler Java Basics - Anfänger-Themen 7
G Stackoverflow! Java Basics - Anfänger-Themen 14
S Stackoverflow Error Java Basics - Anfänger-Themen 5
G Parser liefert StackOverflow error Java Basics - Anfänger-Themen 6
C StackOverflow Error, objekte öfters erzeugen Java Basics - Anfänger-Themen 6
M StackOverFlow bei JOptionPane? Java Basics - Anfänger-Themen 23
H Löschen in einem binären Baum führt zu einem StackOverflow Java Basics - Anfänger-Themen 2
P StackOverFlow - SocketTimeoutException Java Basics - Anfänger-Themen 12
frau-u StackOverflow - woher kommt es? Java Basics - Anfänger-Themen 7
Spencer Reid erster Kontakt mit Datenbanken Java Basics - Anfänger-Themen 5
W Erste Schritte Erster Buchstabe groß bzw. klein???? Java Basics - Anfänger-Themen 2
johnnydoe Erste Schritte Erster Blick - erste Fragen Java Basics - Anfänger-Themen 11
F problem mit erster methode. Java Basics - Anfänger-Themen 6
T Problem mit erster Kalenderwoche Java Basics - Anfänger-Themen 27
L Kleiner erster p2p-Chat Problem Java Basics - Anfänger-Themen 2
F Erste Schritte String von anderer Klasse auf TextArea von erster Klasse Java Basics - Anfänger-Themen 12
M Erster JAR Start überprüfen Java Basics - Anfänger-Themen 6
K Erster Versuch ein Hello World Projekt zu schreiben Java Basics - Anfänger-Themen 11
V Mein erster Konstruktor Java Basics - Anfänger-Themen 3
R Hilfe bei erster Grafik Java Basics - Anfänger-Themen 2
F Erster Tag mit Java Editor Java Basics - Anfänger-Themen 32
I Datenbank - nach erster Verbindung keine Verbindung mehr Java Basics - Anfänger-Themen 3
V Ignorieter erster Mainaufruf Java Basics - Anfänger-Themen 5
M Erster HashMap-test Java Basics - Anfänger-Themen 5
Developer_X Mein erster Internet Explorer Java Basics - Anfänger-Themen 14
N Erster Gehversuch in JAVA [ Brauche Meinungen ] Java Basics - Anfänger-Themen 2
G Erster Buchstabe groß bzw. klein? Java Basics - Anfänger-Themen 4
W ich und mein erster Veresuch hilfe Java Basics - Anfänger-Themen 23
S Erster Versuch: Passwort erstellen Java Basics - Anfänger-Themen 3
Gama Problem mit erster Applikation Java Basics - Anfänger-Themen 25
ChackZz Java-Rätsel: Mein erster Versuch Java Basics - Anfänger-Themen 19
H Streams etc. erster Versuch Zeilen aus einer Datei zu lesen Java Basics - Anfänger-Themen 6
G Mein erster Thread funktioniert nicht. Java Basics - Anfänger-Themen 3
K Erster Buchstabe groß Java Basics - Anfänger-Themen 7
D GPIO Nutzung mit Pi4J Library auf Raspberry funktioniert nicht Java Basics - Anfänger-Themen 3
I Eigene Java Tools Nutzung Java Basics - Anfänger-Themen 6
H Methoden Nutzung der Werte einer ausgeführten Objektmethode in anderen Objektmethoden Java Basics - Anfänger-Themen 2
S Implementierung der Klasse Konto und Nutzung bereits vorhandener Klassen Java Basics - Anfänger-Themen 7
K Nutzung einer Klasse die das Iterator-Interface implementiert Java Basics - Anfänger-Themen 0
L Datentypen Nutzung von Kommas in Benutzeroberfläche Java Basics - Anfänger-Themen 3
F BufferedImage Speicher Nutzung Java Basics - Anfänger-Themen 2
H Nutzung von Hilfsmethoden Java Basics - Anfänger-Themen 10
S Nutzung einer implementierten Schnittstelle Java Basics - Anfänger-Themen 3
L Probleme bei Offline-Nutzung von Java-Applets Java Basics - Anfänger-Themen 6
K Problem bei Hashmap Nutzung Java Basics - Anfänger-Themen 22
M Breite von String für Serverseitige nutzung Berechnen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben