# Integer auf Leer überprüfen



## gentleL (6. Okt 2008)

Hallo,

in meinem Prog les ich ein Label ein was da drin steht und wandel es in Integer um.

Jetzt wollte ich wissen wie ich überprüfe ob dieses Label auch leer ist.

Hab da paar Sachen probiert ohne Ergebniss 

Danke schonmal


----------



## SlaterB (6. Okt 2008)

label == null

label.getText() in Variable st speichern

st == null,

"".equals(st)

st.length() == 0

usw


----------



## gentleL (6. Okt 2008)

Hmm  also ich hab das Label hier zB 


```
bodenLabel = new JLabel();
			bodenLabel.setBounds(new Rectangle(650, 33, 40, 19));
			bodenLabel.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 14));
			bodenLabel.setForeground(Color.white);
			bodenLabel.setText("");
```


Dann gibt es ein berechnen button bei mir und ein export button..

er soll zb nicht exportieren wenn die berechnung nicht gemacht worden ist

d.h ich will das label prüfen ob es leer ist.

wie setzt ich das label == null ?

ich wandel es mit der methode um


```
public static int umwandeln(String uebergabe)
{
	int zahl;
	try
	{	
	zahl = Integer.parseInt(uebergabe);
	}
	catch(NumberFormatException nfe)
	{
		
		zahl=0;
	}
	return zahl;
}
```

dann übergabe halt 

boden1 =umwandeln(bodenLabel.getText());


----------



## ARadauer (6. Okt 2008)

bodenLabel.getText.length()==0

dann ists leer, da brauchst gar nicht anfangen zum umwandeln...

aus "" kannst kein Integer machen


----------



## SlaterB (6. Okt 2008)

die Methode hat offensichtlich nichts mit einem Label zu tun,
das findet doch vorher in der Zeile 

> boden1 =umwandeln(bodenLabel.getText());

statt,
und da kannst du prüfen, ob bodenLabel null ist,
was ist dazu die Frage, die 3 Zeilen Code?

aber ein Label ist ja normalerweise auch nicht null,
was ist überhaupt das genaue Problem?


----------



## gentleL (6. Okt 2008)

Mein Programm soll, wenn der Berechnen Button gedrückt worden ist exportieren.

Ich wollte es so machen das er eine if abfrage macht wenn boden1=leer dann soll der halt speichern und exportieren

ansonsten eine fehlermeldung

zuerst hab ich mir das so gedacht aber es funktioniert nicht


```
if(boden1!=0)
						{
							if(dateiname.endsWith(".*"))
					    	{
					    		PdfWriter.getInstance(doc, new FileOutputStream(dateiname));
					    	}
							else
							{
					    	PdfWriter.getInstance(doc, new FileOutputStream(dateiname+".pdf"));
							} 
						}
						else
						{
							berechnungLabel2.setText("Keine Berechnungen vorgenommen");
						}
```


----------



## Schandro (6. Okt 2008)

Er will wissen ob der TEXT des Labels null ist. Das isser natürlich nie, sondern max. ""
Prüf deshalb einfach:
if(label.getText().equals("")){}


----------



## gentleL (6. Okt 2008)

klappt danke


----------



## SlaterB (6. Okt 2008)

> if(bodenLabel.getText().equals(""))  [..]


-> 

System.out.println("in bodenLabel steht folgendes drin: ..");
System.out.println("daraus ergibt sich folgendes Ergebnis für den equals-Vergleich: ..");
System.out.println("so weiß ich genau, was in meinem Programm los ist");

edit: na gut, klappt schon


----------



## Gast (6. Okt 2008)

Hallo,

Es ist doch immer wieder erstaunlich, dass eine einfache Frage zwar "richtig" aber "suboptimal" beantwortet wird.



> label.getText().equals("")



In Java 1.6 gibt es auch auf "String" die Methode isEmpty().


```
label.getText().isEmpty()
```

Vorteil der Methode ist, dass sie auch ein "trim" ausfuehrt. In vorliegenden Fall vermutlich ueberfluesssig aber trotzdem ist "isEmpty" auch in diesem Fall sehr viel sinnvoller als die Pruefung mit equals.


----------



## Guest (6. Okt 2008)

Gast hat gesagt.:
			
		

> *Vorteil der Methode ist, dass sie auch ein "trim" ausfuehrt.* In vorliegenden Fall vermutlich ueberfluesssig aber trotzdem ist "isEmpty" auch in diesem Fall sehr viel sinnvoller als die Pruefung mit equals.



Es wird kein trim() ausgeführt. Das müsste man dann schon explizit selber veranlassen.


----------



## Schandro (6. Okt 2008)

Gast 2 über mir:

ja klar, benutzen wir doch eine Spezialmethode wenn ein grundlegendes Verständnisproblem vorliegt ...


----------



## gentleL (6. Okt 2008)

Jetzt hab ich das Problem das wenn ich nen Button testen will ob in einem Label berechnung drin steht  und ich drauf klicke wenn da nichts drin steht dann macht der mir ne NullpointerException

hier der code


```
if(berechnungLabel2.getText().contains("Berechnungen"))
				{
					berechnungLabel2.setText("Bitte ein Dateiname eingeben");
					
				}
```


----------



## Zed (6. Okt 2008)

Prüf vorher ab ob der Text leer ist Oo

Edit: 
Du bekommst nur einen Nullponter wenn das Object nicht initialisiert wurde. Bei einem label.getText zu machen sollte dir eher "" zurückliefern.


----------



## gentleL (6. Okt 2008)

was soll ich jetzt genau machen ?!


----------



## gentleL (6. Okt 2008)

Würde den Fehler gern beheben, denn so läuft das Programm es funktioniert auch aber warum der da eine NullPointerException macht ist unklar und wie ich das behebe auch ....


----------



## shad0w (6. Okt 2008)

Der Grund ist: berechnungLabel2 zeigt auf kein Objekt, sondern ist == null.


----------



## gentleL (6. Okt 2008)

aber in berechnungLabel2 steht von vornehin was drin ?

was muss ich den ändern shad0w ?


----------



## Guest (7. Okt 2008)

Wäre vielleicht nicht schlecht, wenn du uns etwas mehr von deinem Sourcecode zeigst, dann könnte man leichter helfen.


----------



## ARadauer (7. Okt 2008)

es gibt wahrscheinlich kein,
berechnungLabel2 = new JLabel();

das Label musst du schon erstellen,


----------



## gentleL (7. Okt 2008)

Das unlustige ist, dass ich das Label schon erzeugt habe


```
berechnungLabel2 = new JLabel();
			berechnungLabel2.setBounds(new Rectangle(42, 69, 218, 15));
			berechnungLabel2.setText("Bitte ein Dateiname eingeben");
			berechnungLabel2.setForeground(Color.red);
```


----------



## SlaterB (7. Okt 2008)

kannst du weiter unlustig finden oder ein ganzes Programm posten (eigenständiges Denken = Entfernen irrelevanter Bestandteile ist erlaubt),
dann wäre das schon längst in wenigen Minuten geklärt worden


----------



## gentleL (7. Okt 2008)

```
private JPanel getExportContentPane() {
		if (ExportContentPane == null) {
			berechnungLabel2 = new JLabel();
			berechnungLabel2.setBounds(new Rectangle(42, 69, 218, 15));
			berechnungLabel2.setText("Bitte ein Dateiname eingeben");
			berechnungLabel2.setForeground(Color.red);
			dateinameLabel = new JLabel();
			dateinameLabel.setBounds(new Rectangle(2, 36, 61, 16));
			dateinameLabel.setText("Dateiname");
			dateiLabel = new JLabel();
			dateiLabel.setBounds(new Rectangle(99, 3, 62, 16));
			dateiLabel.setDisplayedMnemonic(KeyEvent.VK_UNDEFINED);
			dateiLabel.setHorizontalTextPosition(SwingConstants.CENTER);
			dateiLabel.setText("PDF Export");
			ExportContentPane = new JPanel();
			ExportContentPane.setLayout(null);
			ExportContentPane.add(getDateiButton(), null);
			ExportContentPane.add(dateiLabel, null);
			ExportContentPane.add(dateinameLabel, null);
			ExportContentPane.add(getDateinameTextFeld(), null);
			ExportContentPane.add(berechnungLabel2, null);
			
		}
		return ExportContentPane;
	}
```


Das is der Content von dem Dialog


```
private JButton getBerechneButton() {
		if (berechneButton == null) {
			berechneButton = new JButton();
			berechneButton.setBounds(new Rectangle(28, 395, 96, 26));
			berechneButton.setText("Berechnen");
			berechneButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
				int hoehe,breite,tiefe,lueftungOben,stegUnten,stegOben,stegGitter,innenStegHoehe,materialStaerke;
				hoehe = umwandeln(hoeheTextFeld.getText());
				breite = umwandeln(breiteTextFeld.getText());
				tiefe = umwandeln(tiefeTextFeld.getText());
				lueftungOben = umwandeln(lueftungObenTextFeld.getText());
				stegUnten = umwandeln(stegUntenTextFeld.getText());
				stegOben = umwandeln(stegObenTextFeld.getText());
				stegGitter = umwandeln(stegGitterTextFeld.getText());
				innenStegHoehe = umwandeln(innenStegHoeheTextFeld.getText());
				materialStaerke = umwandeln(materialStaerkeTextFeld.getText());
				
				
				bodenLabel.setText(""+breite);
				bodenLabel3.setText(""+tiefe);
				breite-=(materialStaerke*2);
				rueckseiteLabel1.setText(""+breite);
				hoehe-=(materialStaerke*2);
				rueckseiteLabel3.setText(""+hoehe);
				seitenplattenLabel1.setText(""+tiefe);
				seitenplattenLabel3.setText(""+hoehe);
				breite = umwandeln(breiteTextFeld.getText());
				deckelLabel1.setText(""+breite);
				tiefe=(tiefe/2)-(lueftungOben/2-5);
				deckelLabel3.setText(""+tiefe);
				hoehe = umwandeln(hoeheTextFeld.getText());
				breite = umwandeln(breiteTextFeld.getText());
				breite=(breite/2)+20;
				glasLabel1.setText(""+breite);
				hoehe=hoehe-((stegUnten+stegOben)+(innenStegHoehe-stegGitter)+(materialStaerke*2)+4);
				glasLabel3.setText(""+hoehe);
				breite = umwandeln(breiteTextFeld.getText());
				breite-=(materialStaerke*2);
				stegObenLabel1.setText(""+breite);
				stegObenLabel3.setText(""+stegOben);
				stegUntenLabel1.setText(""+breite);
				stegUntenLabel3.setText(""+stegUnten);
				stegGitterLabel1.setText(""+breite);
				stegGitterLabel3.setText(""+stegGitter);
				innenstegLabel1.setText(""+breite);
				innenstegLabel3.setText(""+innenStegHoehe);
				if(berechnungLabel2.getText().contains("Berechnungen"))
				{
					berechnungLabel2.setText("Bitte ein Dateiname eingeben");
					
				}
				
				}
			});
		}
		return berechneButton;
	}
```

Das ist der Berechnen Button, der soll eine Meldung auf dem Dialog wieder reseten


Hoffe das reicht


----------



## SlaterB (7. Okt 2008)

> stegObenLabel1.setText(""+breite);
> stegObenLabel3.setText(""+stegOben);
> stegUntenLabel1.setText(""+breite);
> stegUntenLabel3.setText(""+stegUnten);
> ...


soviel zum eigenständigen Denken = Entfernen irrelevanter Bestandteile 
(sorry  )

das bringt bisher nix, es geht um das Gesamtprogramm,
z.B. ob du zu dem Zeitpunkt, zu dem du auf berechnungLabel2 zugreifen musst,
genau das übergeordnete Objekt (JFrame-Subklasse?) verwendest, in welchem berechnungLabel2 gesetzt ist,
oder ein ganz anderes zweites Objekt


----------



## gentleL (7. Okt 2008)

ich hab das mal Programm gepackt und hochgeladen

jetzt krieg ich auf einmal bei Hilfe -> About auch eine NullPointerException ich kotz gleich ^^

http://gentlel.bplaced.net/Terrarium.rar


----------



## Guest (7. Okt 2008)

Du könntest dein Programm mal durch einen Debug-Modus laufen lassen mit vorher gesetzten kritischen Stellen (vor NullPointerException und ein paar mal davor) um den Code besser nachvollziehen zu können. Da kannst du dir sämtliche Werte der Variablen anzeigen lassen.


----------



## SlaterB (7. Okt 2008)

siehst, zwar versteckt in tausenden Zeilen, aber total simpel:

- getExportContentPane() wird nur in getExportDialog() aufgerufen,
- getExportDialog() wird nur im ActionListener zum Export2PDF-MenuItem aufgerufen

wenn du also zuerst einmal auf Export2PDF klickst, erst dann ist das berechnungLabel2 gesetzt, dann funktioniert der Berechnen-Button,
vorher nicht, denn vorher wird getExportContentPane() doch gar nicht ausgeführt

denkbare Lösung:
nicht direkt auf berechnungLabel2 zugreifen, sondern auf
getBerechnungLabel2(), und die Methode initialisiert das JLabel, falls es noch nicht gesetzt ist
(es darf dann aber keine andere Stelle im Programm die Variable auch initialisieren!)

---------

bei about ist es noch simpler:

> aboutContentPane.add(jLabel1, BorderLayout.WEST);

liefert eine Exception, weil jLabel1 null ist, und diesmal gibts auch keine Tricks, jLabel1 wird einfach NIRGENDWO gesetzt

eine andere Variable jLabel dagegen schon, mit solch bescheidenen Namen muss es ja schiefgehen..


----------



## gentleL (7. Okt 2008)

Super dank dir SlaterB hat alles wunderbar geklappt 

Vieleeen dankkk


----------



## gentleL (13. Okt 2008)

Jetzt hab ich das so gemacht wie in dem Thread hier

http://java-forum.org/de/topic76168_pr-fe-ob-exception.html

und jetzt funktioniert die Funktion


```
if(bodenLabel3.getText().equals(""))
						{
							berechnungLabel2.setText("Keine Berechnungen vorgenommen");
						}
						else
						{
							if(dateiname.endsWith(".*"))
					    	{
					    		PdfWriter.getInstance(doc, new FileOutputStream(dateiname));
					    	}
							else
							{
					    	PdfWriter.getInstance(doc, new FileOutputStream(dateiname+".pdf"));
							} 
						}
```

auf einmal nicht mehr 

Wenn ich draufklicke wenn nicht berechnet worden ist, dann macht der mir ne Exception weil irgendwas nicht stimmt 

Kann mir einer helfen ich lad von mir aus den Quelltext neu hoch


----------



## SlaterB (13. Okt 2008)

vorher wäre genaue Sprache wie z.B. die Fehlermeldung nützlich


----------



## gentleL (13. Okt 2008)

Das ist die Exception wenn ich draufdrücke im Exportmenü und noch keien Berechnung vorgenommen ist


Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at Terrarium.umwandeln(Terrarium.java:668)
	at Terrarium$6.actionPerformed(Terrarium.java:928)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)




edit:  http://gentlel.bplaced.net/Terrarium.rar


----------



## SlaterB (13. Okt 2008)

im angegebenen Link war aber offensichtlich davon die Rede, dass irgendwo 

catch(NumberFormatException ex) { 

steht,
wie ist das denn umgesetzt?


----------



## gentleL (13. Okt 2008)

```
catch(NumberFormatException ex) 
					{ 
					JDialog jErrorDialog = getJErrorDialog();
					jErrorDialog.pack();
					Point loc = getJFrame().getLocation();
					loc.translate(20, 20);
					jErrorDialog.setLocation(loc);
					jErrorDialog.setVisible(true);
					}
```



Das ist Zeile 726


----------



## SlaterB (13. Okt 2008)

der Fehler tritt in Zeile 928 auf, wen interessiert da ein catch in Zeile 726?


----------



## gentleL (13. Okt 2008)

Irgendwie bin ich blind oder ich seh den Fehler nicht


----------



## SlaterB (13. Okt 2008)

du hast 


```
public class A {

  public void x() {
    try ..
       umwandeln();
    catch NumberFormatException ..
  }

  public void y() {
       umwandeln();
  }

}
```

in y() tritt eine NumberFormatException auf, wie soll das try/ catch aus der Methode x() dabei helfen?


----------



## gentleL (13. Okt 2008)

Achso und wie behebe ich den Fehler  

weil davor ging es ja nur seit dem try catch gehts nichtmehr


----------



## SlaterB (13. Okt 2008)

was ist denn überhaupt der Fehler,
die Exception kommt offensichtlich durch die Fehleingabe, was soll dann passieren?
wieso programmierst du kein try/ catch hin?


----------



## gentleL (13. Okt 2008)

Wenn keine Berechnung durchgeführt ist soll der dahinschreiben auf berechnungLabel2 , " Keine Berechnungen vorgenommen".

Das hat bis gestern geklappt seit dem try catch gehts nicht mehr 

Und ich weiß nicht wie ich das behebe.


----------



## SlaterB (13. Okt 2008)

try/ catch wieder hinschreiben? im Moment ist es nicht da


----------



## gentleL (13. Okt 2008)

Es steht doch ein Try catch da und als ich das bei dem berechneButton geändert hab geht die Anzeige nicht mehr


```
if(bodenLabel3.getText().equals(""))
						{
							berechnungLabel2.setText("Keine Berechnungen vorgenommen");
						}
						else
						{
							if(dateiname.endsWith(".*"))
					    	{
					    		PdfWriter.getInstance(doc, new FileOutputStream(dateiname));
					    	}
							else
							{
					    	PdfWriter.getInstance(doc, new FileOutputStream(dateiname+".pdf"));
							} 
						}
```

Der schreib einfach kein "Keine Berechnung vorgenommen"

und ich habe da nichts geändert nur halt bei dem berechneButton


----------



## SlaterB (13. Okt 2008)

> und ich habe da nichts geändert 

doch, du hast in umwandeln() das try/ catch entfernt, was nicht nur in berechneButton() verwendet wird sondern auch an anderen Stellen

wenn du hier nicht das Verhalten von berechneButton() haben willst,
dann schreibe dir zwei verschiedene umwandeln()-Methoden

oder fange auch hier die NumberFormatException ab


----------



## gentleL (13. Okt 2008)

Irgendwie mach ich grad alles kaputt -.-

Ich versteh nicht genau was ich machen soll


----------



## SlaterB (13. Okt 2008)

die Exception muss irgendwo abgefangen werden, was gibts daran nicht zu verstehen?


----------



## gentleL (13. Okt 2008)

Hab gerafft hat klappt danke ^^


----------

