2016-10-28 6 views
0

Ich versuche gerade, diesen Teil meines Codes zu erhalten, um zu vergleichen, welche Schaltfläche der Benutzer wählt, um die Schaltfläche selbst zu wählen. Im Moment zeigt es automatisch das else an, das Test2 ist.JOptionPane versucht abzurufen, welche Schaltfläche ausgewählt ist

Object usersChoice; 

    Object[] options = { "Go on a journey!", "Exit, i'm tired." }; 
    usersChoice = JOptionPane.showOptionDialog(null, "Hello Melissa :)", "Sunshine program", 
    JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, 
    null, options, options[0]); 

    if(usersChoice == options) 
    { 
     JOptionPane.showMessageDialog(null, "Test1"); 
    } else { 
     JOptionPane.showMessageDialog(null, "Test2"); 
    } 
+0

Was ist Ihr beabsichtigtes Verhalten? – Thunderforge

+0

In dem sonst werde ich zwei Funktionen in dort setzen, aber ich schrieb einfach zwei joptions, um es zu prüfen. Ich möchte, dass es so ist, wenn der Benutzer den Knopf "Geh auf eine Reise!" Es geht in die if-Anweisung, sonst "Exit, ich bin müde". – Danny

Antwort

3

Das Problem ist mit diesem Code (Ich habe die Erklärung von usersChoice für Klarheit bewegt):

Object[] options = [...] 
Object usersChoice = JOptionPane.showOptionDialog([...]) 

Die Methode JOptionPane.showOptionDialog() einen int zurückgibt. Da das ein Primitiv ist, wird es zu einem Integer autoboxed.

Jetzt haben Sie diesen Code:

if(usersChoice == options) 

Sie sind ein Object[] zu einem Object (genauer gesagt, eine Integer) zu vergleichen. Das wird immer falsch sein, weil sie verschiedene Typen sind.

Denken Sie auch daran, dass in Java mit == überprüft auf Gleichheit auf Primitiven, aber Object s im Vergleich dieser Weg wird durch ihre Speicherorte verglichen werden. Verwenden Sie stattdessen .equals(), um Object s zu vergleichen.

Verwandte Themen