Ergebnis 1 bis 7 von 7
  1. #1
    4 Jahre hier
    Registriert seit
    Mar 2006
    Beiträge
    6.289

    Standard [Java] Kompletter Block wird übergangen?!

    Moin,
    wir sollen gerade eine GUI für eine Art Verwaltung schreiben, soweit auch kein Problem. Die Operationen sind einfügen, löschen und aktualisieren. Nach allen dreien soll ein kurzer Bestätigungsdialog eingeblendet werden. Beim Löschen funktioniert das auch, beim Rest jedoch nicht: Der Dialog wird zwar anscheinend angezeigt (zumindest wird in der Funktion ein kleiner Konsolenauswurf getätigt), jedoch wird er sofort wieder zerstört - das komische ist, dass genau das auch passieren soll, aber erst NACHDEM "OK" geklickt wurde. Meine Vermutung ist, dass das erste "ich bin mitm eingeben fertig"-OK nicht "entwertet" wird, sondern direkt als "ja, soll wirklich so"-OK weiterverarbeitet wird. Eigtl wollte ich das mit e.consume() erledigen, leider bietet ein ActionEvent sowas aber nicht an.

    Die entsprechende Methode:
    Code:
    @Override
    	public void actionPerformed(ActionEvent e){
    		if(e.getActionCommand()=="löschen"){
    			try{
    			confirmFrame(selected, "löschen");
    			}
    			catch(NullPointerException n){
    			
    			}
    		}
    		if(e.getActionCommand()=="einfügen"){inputFrame(false);}
    		if(e.getActionCommand()=="aktualisieren"){
    			try{
    				inputFrame(true);
    			}
    			catch(NullPointerException n){
    				initFrame(); 
    			}
    		}
    		if(e.getActionCommand()=="Help"){}
    		if(e.getActionCommand()=="Cancel"){initFrame();}
    		if(e.getActionCommand()=="OK"){
    			if(init.getTitle().equals("Bitte Daten eingeben!")){
    				if(changed){
    					input.setName(f_name.getText());
    					
    					input.setRel(Float.parseFloat(f_rel.getText()));
    					input.setVname(f_vname.getText());
    					confirmFrame(input, "aktualisieren");
    				}
    				else{
    				input.setName(f_name.getText());
    				input.setRel(Float.parseFloat(f_rel.getText()));
    				input.setVname(f_vname.getText());
    				
    				confirmFrame(input, "einfügen");
    				}
    				
    			}
    			if(conf.getTitle().equals("Bitte löschen bestätigen")){
    				s.removeMember(selected);
    				initFrame();
    			}
    			if(conf.getTitle().equals("Bitte einfügen bestätigen")){
    				s.addMember(input);
    				conf.dispose();
    				initFrame();
    			}
    			if(conf.getTitle().equals("Bitte aktualisieren bestätigen")){
    				selected.setName(input.getName());
    				
    				selected.setVname(input.getVname());
    				
    				selected.setRel(input.getRel());
    				
    				initFrame();
    				
    			}
    			
    		}
    Da ich a) das erste Mal sowas mache und b) schon ordentlich rumexperimentiert hab, sieht der Code nicht mehr allzu schön aus. Die Klassen bzw Variablen sollten selbsterklärend sein.

  2. #2
    Mitglied Avatar von RnBandCrunk
    Registriert seit
    Oct 2009
    Beiträge
    125

    Standard Re: [Java] Kompletter Block wird übergangen?!

    Strings werden nicht mit == verglichen.

    Aus einem Forum für JavaProgrammierung:

    Strings werden nicht mit dem "==" Operator verglichen. Strings sind Objekte, die mit der Methode "equals(Object obj)" verglichen werden.
    Wenn man sie mit "==" vergleicht, wird nicht der Inhalt der Objekte, sondern das Objekt selbst verglichen. Da das ja ein anderes ist, kann man sie so nicht vergleichen.


    Bsp:
    Java Code: Quelltext in neuem Fenster öffnen

    Code:
    String a = new String("blabla");
    String b = new String("blabla");
     
    if (a.equals(b))
    {
        System.out.println("equals");
    }
     
    if (a == b)
    {
        System.out.println("==");
    }
    Ausgabe:
    equals
    das sollte es sein

  3. #3
    Mitglied
    Registriert seit
    Oct 2004
    Beiträge
    560

    Standard Re: [Java] Kompletter Block wird übergangen?!

    Jop weil Java kein Operator overloading kennt muss man strings mit equals vergleichen.

  4. #4
    \o/ Avatar von sumisumi
    Registriert seit
    Jan 2008
    Beiträge
    4.039

    Standard Re: [Java] Kompletter Block wird übergangen?!

    Wobei ja + für Strings doch "überladen" ist.

  5. #5
    Mitglied Avatar von tuttle64
    Registriert seit
    Aug 2011
    Ort
    Zürich
    Beiträge
    56

    Standard Re: [Java] Kompletter Block wird übergangen?!

    Zitat Zitat von RnBandCrunk Beitrag anzeigen
    Strings werden nicht mit == verglichen.

    Aus einem Forum für JavaProgrammierung:

    das sollte es sein

    Alles richtig, nur kann es gerade bei Strings verwirrend sein, weshalb dieser Code

    Code:
    		String a = "blabla";
    		String b = "blabla";
    
    		if (a.equals(b)) {
    			System.out.println("equals");
    		}
    
    		if (a == b) {
    			System.out.println("==");
    		}
    Die Ausgabe:
    equals
    ==

    erzeugt. Um das zu erklären muss man wissen, dass die JVM bei Strings mit einem Stringpool arbeitet und dort bei der Stringzuweisung nachschaut, ob der neue String schon vorhanden ist. Falls ja, wird kein neues Stringobjekt erzeugt, sondern nur noch die Referenz kopiert. Deshalb liefert ein Vergleich mit == true. Wird der neue String mit new erzeugt, ist dies nicht der Fall.

  6. #6
    \o/ Avatar von sumisumi
    Registriert seit
    Jan 2008
    Beiträge
    4.039

    Standard Re: [Java] Kompletter Block wird übergangen?!

    Als Ergänzung:
    Es werden alle Strings im Pool gespeichert die beim kompilieren als Konstanten vorliegen. Also jeder String der in "" im Code steht. (es sei denn man benutzt new String(""))

    The single copy of each string is called its 'intern' and is typically looked up by a method of the string class, for example String.intern() in Java. All compile-time constant strings in Java are automatically interned using this method.
    http://en.wikipedia.org/wiki/String_interning

  7. #7
    4 Jahre hier

    (Threadstarter)


    Registriert seit
    Mar 2006
    Beiträge
    6.289

    Standard Re: [Java] Kompletter Block wird übergangen?!

    Das dürfte aber eigtl nicht das Problem sein ( wobei ich zugeben muss, dass es nach diesen Infos wirklich unsauber aussieht), unser Übungsleiter hat uns einige Beispiele gegeben und da wurde das genauso gemacht => ich gehe davon aus, dass das so muss.

    Aber um mal aufs Problem zu lenken: Die Überprüfung der Strings klappt soweit ich das beurteilen kann, es wird bloß eben der o.g. Block einfach voreilig übergangen.

  8.  
     
     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •