Forum: PC-Programmierung Java-Problem


von Lars (Gast)


Lesenswert?

Hi zusammen,

Es geht hier um die Programmiersprache Java, in der ich die Inhalte 
zweier JTextFields einlesen möchte.

Im unten stehenden Code möchte ich überprüfen, ob eines oder beide der 
Textfelder "leer" ist. Sollte das der Fall sein, soll er in die 
IF-Anweisung und die MessageBox "Fehler blablablabl" ausgeben.


Leider wirft mir die Konsole laufend Fehler und das Ganze zeigt in der 
Laufzeit null Wirkung, obwohl ich leider nicht erkennen kann, wo mein 
Fehler liegt.
1
if (e.getSource() == btn_Scan)
2
    {
3
      String IP_Address = txt_IPAddress.getText();
4
      String Port_temp = txt_Port.getText();
5
      int Port = Integer.parseInt(txt_Port.getText());
6
      
7
      try        
8
      {
9
        
10
        if( (IP_Address.equals("")) || (Port_temp.equals("")))
11
        {      
12
            JOptionPane.showMessageDialog(null,"Bitte geben Sie die IP-Adresse und/oder den Port ein!", "Fehler", JOptionPane.PLAIN_MESSAGE);  
13
        }

Ich verzweifle langsam...

Könnt ihr mir helfen?


Vielen Dank!

von PerryRhodan (Gast)


Lesenswert?

Wenn du prüfen willst ob der String leer opder nicht vorhanden ist dann 
mach

String s;

if ((s == null) || (s.length() == 0))

von Lars (Gast)


Lesenswert?

Hi!

Leider funktioniert das auch nicht, siehe Code:
1
String IP_Address = txt_IPAddress.getText();
2
      String Port_temp = txt_Port.getText();
3
      int Port = Integer.parseInt(txt_Port.getText());
4
      
5
      try        
6
      {
7
        
8
        if( (IP_Address == null) || (Port_temp==null)  )
9
        {      
10
            JOptionPane.showMessageDialog(null,"Bitte geben Sie die IP-Adresse und/oder den Port ein!", "Fehler", JOptionPane.PLAIN_MESSAGE);  
11
        }

von Test (Gast)


Lesenswert?

Zeig doch mal die fehler....gibt bestimmt ne NumberFormatException da 
der try catch block um parseInteger fehlt...

von Vlad T. (vlad_tepesch)


Lesenswert?

Und Pro-Tip:

Vergleiche mit Stringliteralen macht man in Java am besten so rum:
1
  "Irgendeintest".equals(stringVar);

Hat den Vorteil, dass es nicht kracht, wenn stringVar null ist.

Nebenbei: Mich würde es wundern, wenn ein Textfeld ein null-Objekt 
zurück gibt, nur weil kein Text drin steht.

von Bastler (Gast)


Lesenswert?

Es gibt da so Debugger. Mit sowas bei den beiden getText()'s anhalten 
und nachschauen was die in verschiedenen Fällen liefern.
Wer messen kann, muß nicht auswendig lernen!

von Lars (Gast)


Lesenswert?

Hier die Fehler:

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 Socket_PMaisel.actionPerformed

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Lars schrieb:
> Im unten stehenden Code möchte ich überprüfen, ob eines oder beide der
> Textfelder "leer" ist.

Dann solltest du das tun bevor du versuchst aus einem "leerem String" 
eine Zahl zu machen und genau das sagt dir der Fehler...

Lars schrieb:
> Leider wirft mir die Konsole laufend Fehler und das Ganze zeigt in der
> Laufzeit null Wirkung

"Die Konsole" wirft überhaupt nix, Java ist nur so nett wenigstens alle 
Fehler um die sich keiner kümmert auf den Standard-Out zu schreiben 
statt mit einem "Core-Dumped" den Dienst zu quittieren.

Lars schrieb:
> obwohl ich leider nicht erkennen kann, wo mein Fehler liegt

Der Fehler liegt daran das man Schrittweise an ein Problem rangeht und 
nicht erst mal einen großen Haufen "ich will" zusammenbaut und dann 
darin versucht rumzustochern was denn nicht so ist wie man sich das 
vorstellt.

von Test (Gast)


Lesenswert?

Lars schrieb:
> Hier die Fehler:
>
> 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 Socket_PMaisel.actionPerformed

Du meinst wohl einen Fehler. Kannst du Englisch?

von Lars (Gast)


Lesenswert?

>Dann solltest du das tun bevor du versuchst aus einem "leerem String"
>eine Zahl zu machen und genau das sagt dir der Fehler...

Na das habe ich doch im Codebeispiel in meinem Eröffnungs-Thread 
gemacht!


>Kannst du Englisch?
Oh SORRY. Ich meinte natürlich "DER Fehler".

von Karl H. (kbuchegg)


Lesenswert?

Lars schrieb:
>>Dann solltest du das tun bevor du versuchst aus einem "leerem String"
>>eine Zahl zu machen und genau das sagt dir der Fehler...
>
> Na das habe ich doch im Codebeispiel in meinem Eröffnungs-Thread
> gemacht!

Wo genau?

Ich seh im Eröffnungsposting

* das holen von Strings
* das versuchte Konvertieren mittels parseInt in eine Zahl
* die überprüfung ob die Strings leer sind.

Frage: was stimmt an dieser Reihenfolge nicht?
Antwort: es währe wohl vernünftig ZUERST zu testen und erst dann, wenn 
alles in Ordnung ist, zu konvertieren.
Oder hüpfst du zuerst in den Pool und siehst dann erst nach, ob 
überhaupt Wasser im Pool ist? Wohl kaum.

Denn siehe, was sagt dir die Fehlermeldung?
Zuerst mal sagt sie dir, dass das Problem in parseInt aufgetreten ist
1
at java.lang.Integer.parseInt(Unknown Source)
2
             ****************
und sie sagt dir auch, warum parseInt in Probleme gekommen ist:
1
..... For input string: ""
2
                        **
und was daran das Problem ist
1
..... NumberFormatException ....
2
      *********************

Der Input String ist also "" und das ist kein gültiges Format aus dem 
man eine Zahl machen könnte.

Steht alles dort. Du musst nur lesen.

: Bearbeitet durch User
von Test (Gast)


Lesenswert?

Lars schrieb:
>>Kannst du Englisch?
> Oh SORRY. Ich meinte natürlich "DER Fehler".

Gut. Der beste Weg einen Fehler zu bekämpfen ist den Fehler zu 
verstehen. Der Name der Ausnahme sagt oft schon etwas darüber aus (vor 
allem hier). Dann kann man auch noch in der Doku schauen, wann eine 
Funktion eine bestimmte Ausnahme wirft. Damit ist es dann meistens schon 
getan.

von Lars (Gast)


Lesenswert?

Ich initialisiere beide String-Variablen "IP_Address" und "Port_temp" 
mit einem String.
Der Integer-Parse wird ja nicht mal in der IF-Anweisung abgefragt, somit 
ist er völlig nebensächlich.

In der If-Anweisung frage ich, ob "IP-Address" ODER "Port_temp" keinen 
Wert enthält.

Auch folgende IF-Anweisung schlägt fehl:
1
if ( (IP_Address.equals("") || (Port_Temp.equals("")))) {}

von Karl H. (kbuchegg)


Lesenswert?

Lars schrieb:
> Ich initialisiere beide String-Variablen "IP_Address" und "Port_temp"
> mit einem String.
> Der Integer-Parse wird ja nicht mal in der IF-Anweisung abgefragt, somit
> ist er völlig nebensächlich.

Dir vielleicht. Dem Rechner nicht.
Da steht eindeutig
1
      String IP_Address = txt_IPAddress.getText();
2
      String Port_temp = txt_Port.getText();
3
      int Port = Integer.parseInt(txt_Port.getText());
4
                 ****************

"versuch den String in eine Zahl umzuwandeln".

Das steht doch dort, oder hab ich was an den Augen?

Wenn das aber dort steht, dann  macht das der Rechner auch. Und zwar 
genau in der Reihenfolge, wie man den Text von oben nach unten liest. So 
ein Compiler ist doch kein Wunderwuzzi, dem du Programmbrocken vorwerfen 
kannst und er sucht sich dann eine genehme Reihenfolge raus.

> In der If-Anweisung frage ich, ob "IP-Address" ODER "Port_temp" keinen
> Wert enthält.

Kannst du.
Ist aber völlig wurscht. weil der Fehler schon 2 Zeilen vorher beim 
parseInt passiert!

Manchmal hat man schon das Gefühl, man muss dem Programmierer auch noch 
die 4 Zeilen Code, die er geschrieben hat, vorlesen :-(

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

> Kannst du.
> Ist aber völlig wurscht. weil der Fehler schon 2 Zeilen vorher beim
> parseInt passiert!


Jaa. Reihenfolgen sind wichtig!
Zuerst wird überprüft ob Wasser im Swimmingpool ist und erst dann 
versucht man hinzuhüpfen.
Denn anders rum kann das ins Auge gehen. Und dann hilft es dir auch 
nichts mehr, wenn du dich umsiehst und feststellst dass kein Wasser im 
Pool ist, wenn du bereits mit dem Kopf im Beton steckst.

von Lars (Gast)


Lesenswert?

Ai Ai Ai.... ich habe es kapiert.. Man bin ich blöd. :-(

Sorry. Danke dir Bucheggus und allen die mir geholfen haben! :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.