Forum: PC-Programmierung Java-Problem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Lars (Gast)


Bewertung
0 lesenswert
nicht 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.
if (e.getSource() == btn_Scan)
    {
      String IP_Address = txt_IPAddress.getText();
      String Port_temp = txt_Port.getText();
      int Port = Integer.parseInt(txt_Port.getText());
      
      try        
      {
        
        if( (IP_Address.equals("")) || (Port_temp.equals("")))
        {      
            JOptionPane.showMessageDialog(null,"Bitte geben Sie die IP-Adresse und/oder den Port ein!", "Fehler", JOptionPane.PLAIN_MESSAGE);  
        }
    

Ich verzweifle langsam...

Könnt ihr mir helfen?


Vielen Dank!

von PerryRhodan (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Hi!

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

von Test (Gast)


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

von Vlad T. (vlad_tepesch)


Bewertung
1 lesenswert
nicht lesenswert
Und Pro-Tip:

Vergleiche mit Stringliteralen macht man in Java am besten so rum:
  "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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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) (Moderator)


Bewertung
0 lesenswert
nicht 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
at java.lang.Integer.parseInt(Unknown Source)
             ****************
und sie sagt dir auch, warum parseInt in Probleme gekommen ist:
..... For input string: ""
                        **
und was daran das Problem ist
..... NumberFormatException ....
      *********************

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 Moderator
von Test (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:
if ( (IP_Address.equals("") || (Port_Temp.equals("")))) {}

von Karl H. (kbuchegg) (Moderator)


Bewertung
1 lesenswert
nicht 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
      String IP_Address = txt_IPAddress.getText();
      String Port_temp = txt_Port.getText();
      int Port = Integer.parseInt(txt_Port.getText());
                 ****************

"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 Moderator
von Karl H. (kbuchegg) (Moderator)


Bewertung
2 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht lesenswert
Ai Ai Ai.... ich habe es kapiert.. Man bin ich blöd. :-(

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.