JavaFX ClassCastException bei ComboBox.getValue

Diskutiere ClassCastException bei ComboBox.getValue im AWT, Swing, JavaFX & SWT Bereich.
P

Padde85

Hallo zusammen,

ich werde grade wieder mit einer in meinen Augen sinnlosen Exception genervt...

Hintergrund:
Ich habe eine editierbare ComboBox. Wenn ein User einen Wert einträgt und committed, soll dieser Wert in die Combo-Box übernommen werden.
Meine ComboBox erwartet ein Objekt vom Typ OfferTemplate, das lediglich einen key und eine Beschreibung enthält:

Java:
/*
* Container-Klasse für die verschiedenen gespeicherten Templates
*/
public class OfferTemplate {
    private int id;
    private String description;
   
    public OfferTemplate(int id, String description) {
    this.id = id;
    this.description = description;
    }
   
    public int getId() {
    return id;
    }
   
    public void setId(int id) {
    this.id = id;
    }
   
    public String getDescription() {
    return description;
    }
   
    public void setDescription(String description) {
    this.description = description;
    }
   
    public String toString() {
    return this.description;
    }
}
Problem:

Wenn ich nun im Eventhandler der Box versuche, mit ComboBox.getValue.getDescription den Wert auszulesen, bekomme ich folgende Meldung:
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class sdg.main.OfferTemplate (java.lang.String is in module java.base of loader 'bootstrap'; sdg.main.OfferTemplate is in unnamed module of loader 'app')
at sdg.main.MainController.onTemplateCreate(MainController.java:115)
at sdg.main.MainController.onTemplateSelected(MainController.java:122)
... 67 more

Frage:
1. Warum will er hier von String nach OfferTemplate casten? Das müsste doch, wenn überhaupt, andersrum sein oder?
2. Warum bekomme ich diese Exception überhaupt? Ich habe keine module-info-Datei und verwende die Container-Klasse auch an anderen Stellen, wo es nicht knallt. Und er fällt auch definitiv bei der Methode auf die Nase. Wenn ich ein neues Objekt an der gleichen Stelle erzeuge vom gleichen Typ, macht der das ohne Motzen. Wenn ich mir aber über die Methode den eingegebenen Wert geben lassen möchte, schmiert der ab

Danke und Gruß
 
mrBrown

mrBrown

Wenn der Nutzer die ComboBox editiert, kann er nur einen String eingeben, das würde dann über den passenden Converter konvertiert werden.
Wenn der Converter fehlt oder nicht korrekt funktioniert (Hast Du einen gesetzt, wenn Ja welchen?), bleibt das ein String.

Und das ist dann auch der Grund für dieses:
1. Warum will er hier von String nach OfferTemplate casten? [...]
2. Warum bekomme ich diese Exception überhaupt? [...]
Beim Abfragen erwartet dein Code aber ein OfferTemplate, bekommt aber aus der ComboBox einen String, daher die Exception.
 
P

Padde85

Ahhhh, das habe ich natürlich nicht.
Hast du zufällig ein Beispiel für so einen Konverter? :)
 
mrBrown

mrBrown

In der Doku zu StringConverter sollte einer sein, das Interface sollte aber auch ohne Beispiel verständlich sind :)
 
P

Padde85

Alles klar, habe es mir angeschaut und ist tatsächlich selbsterklärend :)

Danke dir für den schnelle Hinweis auf das Problem
 
Thema: 

ClassCastException bei ComboBox.getValue

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben