ClassCastException

Status
Nicht offen für weitere Antworten.

Fridolin

Bekanntes Mitglied
Hallo,
ich versuche Werte aus einer JTable mit table.getValueAt(int, int) per mouseklick in ein textfeld zu schreiben.
Dies funktioniert auch gut, nur bei den Werten aus der Datenbank mit denen ich zuvor meine Tabelle befülle
kommt beim Event mouseClicked eine ClassCastException die so aussieht

Exception occured during event dispatching:
java.lang.ClassCastException
at Dialoge$Mausklasse.mouseClicked(FormularFilm.java:397)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)

Nun meine Frage, was ist eine ClassCastException?
Ich weiß was ein Typecast ist, ist damit vielleicht gemeint das er keine Vektoren in Strings casten kann um sie dann mit textfeld.setText( (String)( table.getValueAt(int, int)) ) in einem textfeld zu setzen? helft mir bitte
 

L-ectron-X

Gesperrter Benutzer
Die getValue()-Methode liefert Typen von Object zurück. Ein Blick in die API-Dok genügt. :###
Das heißt, Du musst die Objekte in die passenden Typen casten. Nur hast Du den Cast etwas verkehrt gemacht.
Code:
textfeld.setText( ((String)table.getValueAt(int, int)) )
Das Textfeld erwartet String-Objekte. Also, Klammern richtig setzen.
 
B

bygones

Gast
L-ectron-X hat gesagt.:
Die getValue()-Methode liefert Typen von Object zurück. Ein Blick in die API-Dok genügt. :###.
Naja - wenn in der Tabelle Strings stehen würde der Cast funktionieren :meld: :wink: bygones[/code]
 

Fridolin

Bekanntes Mitglied
Wieso sollte er sonst nicht funktionieren was ist bei dieser fehlermeldung gemeint

das ist mein einziges event in der mausklasse

Code:
	public void mouseClicked(MouseEvent e)
		{
			
			
		for(int r = 0; r < table.getRowCount(); r++)
			{
if(table.isCellSelected(r,0) == true | table.isCellSelected(r,1) == true | table.isCellSelected(r,2) == true | table.isCellSelected(r,3) == true)
				{
				id.setText((String)(table.getValueAt(r,0))); 	
				name.setText((String)(table.getValueAt(r,1))); 
				dauer.setText((String)(table.getValueAt(r,2))); 
				alter.setText((String)(table.getValueAt(r,3))); 
				System.out.println("MouseAction: " + e);			
				}
				
			}
			
		}

und das meine Textfelder
Code:
table.addMouseListener(new Mausklasse());

 id = new JTextField(""+index, 3);
    id.setBounds(20,60,90,25);
    panel.add(id);
    
    name = new JTextField("Ali baba und die sieben Räuber", 25);
    name.setBounds(130,60,90,25);
    panel.add(name);
    
    dauer = new JTextField("130", 3);
    dauer.setBounds(240,60,90,25);
    panel.add(dauer);
    
    alter = new JTextField("18", 2);
    alter.setBounds(350,60,90,25);
    panel.add(alter);
 
B

bygones

Gast
L-ectron-X hat gesagt.:
@deathbyaclown: Sicher? Guck noch mal genau hin. :D
Du verwirrst mich zwar - aber dennoch bleibe ich bei meinem Standpunkt !
Die Methode getValue ist analog zu den get Methoden aus Collections. Da jedes Objekt in der Tabelle bzw. in einer Collection sein kann wird von Java einfach Object zurückgeben.
Der Entwicklier kann dann das erhaltenen Objekt zu dem casten was eigentlich drin steht. D.h. wenn ein String in der Tabelle steht müsste der Cast
Code:
String s = (String)getValueAt(0,0)
funktionieren.

Auszug aus einem Programm:
Code:
RoomEntry entry = (RoomEntry)model.getValueAt(i, j);
D.h. wenn man sicher ist welches Objekt in der Tabelle steht kann man getrost casten....

oder meinen wir was anderes ?
 

L-ectron-X

Gesperrter Benutzer
@deathbyaclown: Richtig!
Code:
String s = (String)getValueAt(0,0);
textfeld.setText(s);
Das funktioniert und ist nichts anderes wie in meinem Beispiel geschrieben.
Caste mal wie in meinem Beispiel, wirst sehen, dass es richtig ist.
Code:
textfeld.setText( ((String)table.getValueAt(0, 0)) )
...ist einfach nur eine "Kompaktversion" davon.
Du musst erst ein waschechtes String-Objekt haben, um es dann der setText()-Methode zu übergeben.
 

Fridolin

Bekanntes Mitglied
kommt noch immer derselbe fehler, weiß wer was ich noch machen kann, was noch falsch sein könnte,
bei selbst angelegten reihen mit tabellenmodel.addRow(int) geht es nämlich ganz gut
 

L-ectron-X

Gesperrter Benutzer
Bis auf den winzigen Fehler beim Klammer setzen, kann ich in Deinem Code nichts finden.
Poste doch noch mal die Zeile, die die ClassCastException auslöst.
 

Fridolin

Bekanntes Mitglied
Code:
public class Mausklasse extends MouseAdapter
	{
		public void mouseClicked(MouseEvent e)       
		{
			
			
		for(int r = 0; r < table.getRowCount(); r++)
			{
if(table.isCellSelected(r,0) == true | table.isCellSelected(r,1) == true | table.isCellSelected(r,2) == true | table.isCellSelected(r,3) == true)
				{
	<<< diese >>>                         id.setText((String)table.getValueAt(r,0)); 	
				name.setText((String)table.getValueAt(r,1)); 
				dauer.setText((String)table.getValueAt(r,2)); 
				alter.setText((String)table.getValueAt(r,3)); 
				System.out.println("MouseAction: " + e);
						
				}
				
			}
			
		}
		
	}

Code:
try
	{	
	Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
	}
	catch( ClassNotFoundException event )
	{	
	System.out.println ( "Fehler bei ODBC-JDBC Treiber Initialisierung" + event );
	return;
	}	
		Connection con00 = null;
    	Statement stmt00;
    	
		try
		{
		con00 = DriverManager.getConnection( url,"User","Password" );
		stmt00 = con00.createStatement();
    	String sqlQuery00 = "SELECT * FROM Film;";
    	ResultSet rSet00 = null;
    	Vector columnNames = new Vector();
    	Vector rows = new Vector();
    	Vector newrow;
		rSet00 = stmt00.executeQuery( sqlQuery00 );
		ResultSetMetaData metadata = rSet00.getMetaData();
    	int numberOfColumns = metadata.getColumnCount();
    	
		while(rSet00.next())
		{
		newrow = new Vector();
		for(int s = 1; s < numberOfColumns + 1; s++)
		{
		newrow.addElement(rSet00.getObject(s));
		}
		
		rows.addElement(newrow);
		}
		
		
		for (int j = 0; j < numberOfColumns; j++) 
    	{
	    columnNames.addElement(metadata.getColumnLabel(j + 1));
        }
        
        rSet00.close();
        stmt00.close();
		
	model = new DefaultTableModel(rows, columnNames)
	{
		public boolean isCellEditable(int row, int column)
		{
		return false;
		}
	};
	
	table = new JTable();
	table.setBounds(20,105,420,150);
	table.setRowHeight(20);
	table.setRowMargin(0);
	table.setShowHorizontalLines(true);
	table.setShowVerticalLines(true);
	table.setGridColor(Color.black);
	table.setSelectionForeground(Color.white);
	table.setRowSelectionAllowed(true);
	table.setColumnSelectionAllowed(false);
	table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    table.setModel(model);
    table.addMouseListener(new Mausklasse());
	ziehen = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
	ziehen.setBounds(20,105,420,150);
	panel.add(ziehen);
	
		}
  		catch( SQLException event)
		{
		System.out.println( "Fehler bei Tabellenabfrage 02 " + event);	
		return;
		}
    	
		try
		{
		Statement stmt01 = null;
		stmt01 = con00.createStatement();
    	String sqlQuery01 = "SELECT MAX(ID) FROM Film;";
    	ResultSet rSet01 = null;
		rSet01 = stmt01.executeQuery( sqlQuery01 );
	
    	
		while(rSet01.next())
		{
		anzahl = (int)rSet01.getInt(1);
		index = anzahl + 1;
		System.out.println("Anzahl der Zeilen: "+ anzahl);
		}
		
		
		
        
        rSet01.close();
        stmt00.close();
		
	
		}
  		catch( SQLException event)
		{
		System.out.println( "Fehler bei Tabellenabfrage 02 " + event);	
		return;
		}

                finally        <<< und diese >>>
                {
      	try
      	{
      	if ( con00 != null )
        {
        con00.close();
      	}
      	}
      	catch ( SQLException event ) {}
    	}
 
B

bygones

Gast
weiß net obs das ist:
Code:
rSet00.getObject(s)
Du holst dir explizit aus der Datenbank Object-Instanzen und willst die dann zu String casten -> das geht nicht !!
wenn du weißt dass es String sind hol dir doch über getString(s) das ganze als String instanz....

oder du schreibst:
Code:
setText(table.getValue(0,0).toString())
 

Fridolin

Bekanntes Mitglied
nein nein ich weiß was eine ArrayindexOutOfBoundsException ist, das ist wenn ein Array weniger Felder hat als man ansprechen will. ich hab die frage hier nämlich schon einmal gestellt, da ich probleme hatte mein array richtig zu deklarieren...*lol*
ich probier deine lösung einmal aus deathbyaclown aber was mache ich wenn meine datenbankfelder in microsoft access als zahl bzw. text belegt sind?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F ClassCastException Fehler bei Bounds Java Basics - Anfänger-Themen 3
P java.lang.ClassCastException Bedeutung und Lösung Java Basics - Anfänger-Themen 3
J Kann ClassCastException nicht nachvollziehen Java Basics - Anfänger-Themen 5
S ClassCastException bei generischer Klasse Java Basics - Anfänger-Themen 5
C Hilfe!!! java.lang.ClassCastException Java Basics - Anfänger-Themen 1
F Probleme mit ClassCastException Java Basics - Anfänger-Themen 4
P java.lang.ClassCastException Java Basics - Anfänger-Themen 2
E Klassen ClassCastException bei gleichnamigem: paket.klasse cannot be cast to paket.klasse Java Basics - Anfänger-Themen 10
F ClassCastException (Generisches Array) Java Basics - Anfänger-Themen 10
G ClassCastException.bitte helft mir Java Basics - Anfänger-Themen 3
G db daten auslesen, problem mit ClassCastException Java Basics - Anfänger-Themen 8
T ClassCastException Java Basics - Anfänger-Themen 12
N ClassCastException bei Arraylist.get Java Basics - Anfänger-Themen 5
M Fehlermeldung : ClassCastException:null Java Basics - Anfänger-Themen 14
M java.lang.ClassCastException Java Basics - Anfänger-Themen 9
D java.lang.ClassCastException - Woran kann es liegen? Java Basics - Anfänger-Themen 6
M ClassCastException Java Basics - Anfänger-Themen 8
C ClassCastException natürliche Zahlen ->Reelle Zahlen Java Basics - Anfänger-Themen 5
F ClassCastException Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben