2016-09-13 16 views
0

これは私がスイングエラーのClassCastException

// loading all distict age on to list bix from student table 
private void b1ActionPerformed(java.awt.event.ActionEvent evt) {         
DefaultTableModel tb = (DefaultTableModel)tb1.getModel(); 
tb.setRowCount(0); 
String sql = "select * from student"; 
try 
{ 
Class.forName("java.sql.Driver"); 
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/info","root",""); 
Statement s = con.createStatement(); 
ResultSet rs = s.executeQuery(sql); 
while(rs.next()) 
{ 
    int s_rno = rs.getInt(1); 
    String s_name = rs.getString(2); 
    int s_age = rs.getInt(3); 
    double s_marks = rs.getDouble(4); 
    tb.addRow(new Object[]{s_rno, s_name, s_age, s_marks}); 
    tb1.setModel(tb); 
} 
rs.close(); 
s.close(); 
con.close(); 
} 
catch(Exception e) 
{ 
    JOptionPane.showMessageDialog(this, e.getMessage()); 
}   
} 

を入力そして、私はプログラムを実行すると、GUIが表示されますが、ボタンを押すことで、何も起こらない、と私の出力ウィンドウ

に次のエラーがあるコードです

例外スレッドで "AWT-EventQueueの-0" とjava.lang.ClassCastException: $ 2は JDBC2.accessで JDBC2.b1ActionPerformed(JDBC2.java:74)でjavax.swing.DefaultListModelにキャストすることはできませんJDBC2 $ 000(JDBC2.java:9)で javax.swing.AbstractButton $ Handler.actionPerformed(AbstractButton.java:2348) で javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) でJDBC2 $ 1.actionPerformed(JDBC2.java:36) javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) でjavax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.javaで: 25235) (java.awt.Component.processMouseEvent(Component.java:6535)、 )。のjavax.swing.JComponent.processMouseEvent(JComponent.java:3324)java.awt.Component.p (コンテナ): のjava.awt.Component.dispatchEventImpl(Component.java:4891)の のjava.awt.Container.processEvent(Container.java:2236)のjava.awt.Container.dispatchEventImplでのrocessEvent(Component.java:6300) java.awt.LightweightDispatcher.processMouseEventでjava.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) でjava.awt.Component.dispatchEvent(Component.java:4713)でContainer.java:2294)(コンテナ.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) java.awt.Window.dispatchEventImpl(Window.java :2750)at java.awt.Component.dispatchEvent(Components ja):の のjava.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) EventQueue.java:709) すべてjava.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(のProtectionDomainで java.security.AccessController.doPrivileged(ネイティブメソッド)で java.awt.EventQueue $ 3.run(EventQueue.java:703)で。 Javaの: java.awt.EventQueue $ 4.runでjava.awt.EventQueue $ 4.runで76) ですべてjava.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) (EventQueue.java:731) (EventQueue.java:729)at java.security.AccessController.doPr すべてjava.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) java.awt.EventDispatchThread.pumpOneEventForFiltersでjava.awt.EventQueue.dispatchEvent(EventQueue.java:728)で (EventDispatchThreadで(ネイティブメソッド)ivileged .java:201) でjava.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) でjava.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) java.awt.EventDispatchThread.pumpEventsで( EventDispatchThread.java:101) ( )java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt。EventDispatchThread.run(EventDispatchThread.java:82)

私はエラーをどのように理解できますか。

+0

この文を 'Class.forName(" java.sql.Driver ");と置き換えることができますか?この文は' DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 'となります。 ? –

+0

@ N00bPr0grammerなぜですか?いずれも必要ではなく、どちらも例外とは関係ありません。 – EJP

+0

@OPこれは74行ですか?そして 'Class.forName(" java.sql.Driver ");は何もせず、削除する必要があり、Netbeansはそれとは関係ありません。 – EJP

答えて

0

ライン74を見てください。エラーが発生する場所でなければなりません。

アクションイベントが処理されるときは、少し重い作業をしています。以下のコードはinvokeLaterでこれを延期し、少なくとも即時のGUI応答が見えるようにします。

テーブルモデルの使用方法を少し修正しました。まだ少しでも多くのメッセージが発射されます。それが起こるかもしれない

private void b1ActionPerformed(java.awt.event.ActionEvent evt) { 
    SwingUtilities.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      DefaultTableModel tb = (DefaultTableModel) tb1.getModel(); 
      tb.setRowCount(0); 
      String sql = "select * from student"; 
      try (Connection con = DriverManager.getConnection("jdbc:...", "...", ""); 
        Statement s = con.createStatement(); 
        ResultSet rs = s.executeQuery(sql)) { 
       while (rs.next()) { 
        int s_rno = rs.getInt(1); 
        String s_name = rs.getString(2); 
        int s_age = rs.getInt(3); 
        double s_marks = rs.getDouble(4); 
        tb.addRow(new Object[] { s_rno, s_name, s_age, s_marks }); 
       } 
      } catch (SQLException e) { 
       JOptionPane.showMessageDialog(this, e.getMessage()); 
      } 
     } 
    }); 
} 

は次のとおりです。

  DefaultTableModel tb = (DefaultTableModel) tb1.getModel(); 

です(このライン74?)新しいDefaultTableModel作成する方がよいかもしれません一般的に

、との(AbstractTableModelを?)メソッドの終了はtb1.setModel(tb)です。

ところで、すでにResultSetのTableModelがネット上にあります。