Probleme if-Anweisung

IwiS

Bekanntes Mitglied
Hallo alle zusammen,

ich habe Probleme mit eine If-Anweisung in meinem Programm. Mein Programm schreibe ich in Eclipse, dort bekomme ich bei meine dem "else" meiner If-Anweisung folgende Fehlermeldung:
Code:
Syntax error on token "else", delete this token
Mein Quellcode sieht wie folgt aus:
Java:
try
	{
     Properties properties2 = new Properties();
     FileInputStream in = new FileInputStream("einstellungen.properties");
     properties2.load(in);
     if(string == (properties2.getProperty("Passwort")));
     dialog4.dispose();
 	 else
 	 final JDialog dialog5 = new JDialog();
 	 dialog5.setLocation(700, 375);
 	 dialog5.setSize(200, 150);
 	 dialog5.setTitle("Passwort falsch");
 	 dialog5.setVisible(true);
 	 label = new JLabel("Das eingegebene Passwort ist falsch");
 	 Panel panel4 = new JPanel();
 	 JButton button3 = new JButton("Erneut versuchen");
 	 button3.addActionListener(new ActionListener()
 	 {
 	  public void actionPerformed(ActionEvent ev)
 	  {
 	 dialog5.dispose();
 	  }
 	 }
 	 );
 	 panel4.add(button3);
 	 dialog5.add(panel4, BorderLayout.SOUTH);
 	 dialog5.add(label, BorderLayout.CENTER);
	}
	catch(Exception e)
	{
     e.printStackTrace();
	}

Ich verstehe nicht, warum Eclipse das "else" weghaben will, ich brauche es doch für meine If-Anweisung, was kann ich tun, um dieses Problem zu umgehen?

lg IwiS
 
Aus diesem Grund solltest du die [c]{[/c]-Klammern verwenden. Dann würde dir dieser Fehler nicht passieren. Schau mal diese Zeile genau an:
[java=6]if(string == (properties2.getProperty("Passwort")));[/code]

außerdem vergleicht man komplexe Datentypen (wozu auch Strings gehören) mit [c].equals(...)[/c]
 
Was soll das Semikolon in Zeile 6?
Setze grundsätzlich die Codeabschnitte für den then- und else-Fall in geschweifte Klammern, also
Java:
if (bedingung) {
...
}
else {
..
}
 
Hallo,

was das Semikolon da zu suchen hat, kann ich mir selbst nicht erklären. Die geschweiften Klammern hatte ich zuerst, nachdem ich mich dann aber im Internet umgesehen hatte, haben viele Leute keine Klammern verwendet, also dachte ich mir, es sei vllt. besser ohne Klammern zu arbeiten. Das eigentliche Problem lag bei der If-Bedingung.
Ich habe allerdings noch eine Frage. Bei meinem Programm öffnet sich ein Dialog, wie kann ich es möglich machen, dass man von dem Dialog auf keinen Fall in das dahinter liegende Fenster wechseln kann. Ich verwende schon
Code:
dialog.setAlwaysOnTop(true)
, damit der Dialog beim Erscheinen gleich ganz oben ist. Jetzt brauche ich nur noch den Code, damit ich von dem Dialog nicht in das dahinterliegende Fenster wechseln kann.

lg IwiS
 
Einen JDialog setzt man auf modal mit setModal(true), dann kannst du solange nichts in deinem dahinterliegenden Programm machen, bis der Dialog wieder geschlossen wird.

Und das mit den geschweiften Klammern bei if: Wenn du nur 1 Anweisung bei if oder else hast, bräuchtest du diese Klammern nicht unbedingt, ist aber trotzdem sinnvoller und vermeidet Fehler oder Verwirrung...
 
Hallo,

folgendes Problem, bei meiner If-Anweisung wird einfach die erste Anweisung übergangen, egal, ob die Bedingung erfüllt ist oder nicht, und mit der else-Anweisung weitergemacht. Warum ist das so?

lg IwiS

Mein Code:
Java:
try
	{
     Properties properties2 = new Properties();
     FileInputStream in = new FileInputStream("einstellungen.properties");
     properties2.load(in);
     if(string.equals(properties2.getProperty("Passwort")))
     {
      dialog4.dispose();
     }
     else
     {
 	 final JDialog dialog5 = new JDialog(dialog4, "Passwort falsch", true);
 	 dialog5.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
 	 dialog5.setLocation(700, 262);
 	 dialog5.setSize(200, 150);
 	 JLabel label = new JLabel("  Das eingegebene Passwort ist falsch");
 	 JPanel panel4 = new JPanel();
 	 JButton button3 = new JButton("Erneut versuchen");
 	 button3.addActionListener(new ActionListener()
 	 {
 	  public void actionPerformed(ActionEvent ev)
 	  {
 	   dialog5.dispose();
 	  }
 	 }
 	 );
 	 panel4.add(button3);
 	 dialog5.add(panel4, BorderLayout.SOUTH);
 	 dialog5.add(label, BorderLayout.CENTER);
 	 dialog5.setVisible(true);
 	 }
	}
	catch(Exception e)
	{
     e.printStackTrace();
	}
 
Wenn der else-Block ausgeführt wird, ist die Bedinung eben nicht erfüllt.
Lass dir doch mal die Strings, die du vergleichst, ausgeben. Die müssten unterschiedlich sein.
 
Hi,

ich habe mir die Strings ausgeben lassen, beide gleich. Wenn ich die if und else Blöcke vertausche, wird auch der else-Block ausgeführt.

lg IwiS
 
Was gibt
Java:
System.out.println(string.equals(properties2.getProperty("Passwort"));
aus?
 
Im idealfalle gibt das [c]true[/c] aus.
Wenn [c]false[/c], dann sind deine Strings nicht gleich
Wenn ein Fehler kommt, dann diesen hier posten ;-)
 
Hi,

es kommt false herraus. Ich glaube aber trotzdem, dass i-was mit der If-Kontrollstruktur nicht stimmt, denn wenn ich die Anweisung aus dem "else"-Block in den "if"-Block schreibe, wird das gemacht, was in dem "if"-Block steht, egal, was ich eingebe.

lg IwiS
 
Hast du schonmal geschaut, was bei:
Java:
System.out.println(strings);
System.out.println(properties2.getProperty("Passwort"));
rauskommt? Sind da vllt Whitespaces o.ä. dazwischen?
 
Hallo,

ich habe mal ein anderes Passwort genommen. Jetzt kommt true heraus, jedoch funktioniert die Passwortabfrage (der Quellcode) nicht.

lg IwiS
 
ich habe mal ein anderes Passwort genommen. Jetzt kommt true heraus

Es sollte wohl true herauskommen, wenn das eingegeben Passwort mit dem in den Properties stimmt. Wenn das so ist, dann ist doch prima...

jedoch funktioniert die Passwortabfrage (der Quellcode) nicht.

Was meinst du mit Passwortabfrage? Vielleicht musst du den relevanten Code nochmal kurz hier posten, falls du was geändert hast.
 
Hallo,

hier ist der relevante Code:

Java:
final JDialog dialog4 = new JDialog(prog, "Passwortabfrage", true);
  dialog4.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
  dialog4.setFocusableWindowState(true);
  dialog4.setLocation(575, 262);
  dialog4.setSize(450, 110);
  JPanel panel2 = new JPanel();
  JTextField textfield2 = new JTextField(50);
  panel2.add(textfield2);
  JPanel panel3 = new JPanel();
  final String string = textfield2.getText();
  JButton button2 = new JButton("Weiter");
  button2.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent ev)
   {
	try
	{
     Properties properties2 = new Properties();
     FileInputStream in = new FileInputStream("einstellungen.properties");
     properties2.load(in);
     if(string.equals(properties2.getProperty("Passwort")))
     {
      dialog4.dispose();
     }
     else
     {
 	 final JDialog dialog5 = new JDialog(dialog4, "Passwort falsch", true);
 	 dialog5.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
 	 dialog5.setLocation(700, 262);
 	 dialog5.setSize(200, 150);
 	 JLabel label = new JLabel("  Das eingegebene Passwort ist falsch");
 	 JPanel panel4 = new JPanel();
 	 JButton button3 = new JButton("Erneut versuchen");
 	 button3.addActionListener(new ActionListener()
 	 {
 	  public void actionPerformed(ActionEvent ev)
 	  {
 	   dialog5.dispose();
 	  }
 	 }
 	 );
 	 panel4.add(button3);
 	 dialog5.add(panel4, BorderLayout.SOUTH);
 	 dialog5.add(label, BorderLayout.CENTER);
 	 dialog5.setVisible(true);
 	 }
	}
	catch(Exception e)
	{
     e.printStackTrace();
	}
   }
  }
  );
  panel3.add(button2);
  JButton button3 = new JButton("Beenden");
  button3.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent ev)
   {
	System.exit(0);
   }
  }
  );
  panel3.add(button3);
  dialog4.add(panel3, BorderLayout.SOUTH);
  dialog4.add(panel2, BorderLayout.CENTER);
  dialog4.setVisible(true);

lg IwiS
 
Moment mal, wenn du ein Textfeld neu erstellst und dann dort sofort den String rausholst, ist der doch erst mal leer:
[JAVA=7]
JTextField textfield2 = new JTextField(50);
panel2.add(textfield2);
JPanel panel3 = new JPanel();
final String string = textfield2.getText();
[/code]

Also, steht im String nix drin. Du musst das
Code:
final String string = textfield2.getText();
im ActionListener machen.
 
Naja deine Variable "string", übrigens echt grauenhaft der Code und die Bezeichnung der Variablen, ist leer.
Mache mal
Java:
string = textfield2.getText();

vor dein
Java:
Properties properties2 = new Properties();
!

Den rest hab ich mir jetzt nicht angeschaut 😀
 
Hi,

danke für die Tipp's, es hat funktioniert.
@truesoul:
Könntest du mir vllt. erklären, was du an dem Code verbessern würdest.

lg IwiS
 
dialog1
properties2

das sind keine Namen für variablen. Man verwendet hier treffendere Bezeichnungen anstatt das Schema:
[Datentype][counter]
zu verwenden. Gewöhn dir lieber gleich eine sinnvolle Namensgebung an.

z.B. loginDialog anstatt dialog299938382939
 
  1. Keine sprechende Variablenamen
  2. Kein camelCase
  3. Von Zeile 27 - 45 zum Beispiel sollte ausgelagert werden
  4. Auslagern von Code in Methoden
  5. Anstatt System.exit(0); sollte dispose() verwendet werden
  6. Variablen verwenden und nicht sowas wie in der If Bedingung machen

Zu 5. Wobei EXIT_ON_CLOSE auch System.exit() verwendet!

Das hättest du, zum teil, sicherlich auch dort nachlesen können.
 
Zuletzt bearbeitet:

Zurück
Oben