当前位置: 代码迷 >> J2SE >> "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException错误
  详细解决方案

"AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException错误

热度:436   发布时间:2016-04-23 20:40:59.0
"AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException异常
package com.showData;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;


public class showDataByJTable extends JFrame {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub

jframe new_Jframe=new jframe();
Vector<String> vc=new Vector<String>(30,10);
try {
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//得到连接,thin为数据库驱动模式,ORCL为数据库名,client_base为用户名和密码
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL", "client_base", "client_base");
//向数据库发送指令
Statement sm=conn.createStatement();
ResultSet  rs=sm.executeQuery("select * from CC_MEMBER");
while(rs.next())
{
vc.add(rs.getString(5));
vc.add(rs.getString(3));
vc.add(rs.getString(4));    
new_Jframe.dtm.addRow(vc);
vc.clear();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}

}
class jframe extends JFrame
{
JFrame jf;
JTable jTable;
DefaultTableModel dtm;
public jframe ()
{
   Vector<String> vt_row=new Vector<String>(30,10);
   Vector<String> vt_column=new Vector<String>(30,10);
   vt_column.add("姓名");vt_column.add("登录名");vt_column.add("密码");
   jf=new JFrame("框架演示");
   jTable=new JTable(vt_row,vt_column);
   dtm=new DefaultTableModel(vt_row,vt_column);
   jTable.setModel(dtm);
   JScrollPane jsPane=new JScrollPane(jTable);
   getContentPane().add(jsPane,BorderLayout.CENTER);
   jf.setSize(600, 600);
   jf.setLayout(new FlowLayout());
   jf.add(jsPane);
   jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   jf.setVisible(true);
}
}


我想查找数据库  然后在表格上输出
但是报异常 

应该是class jframe类报的 
求各位大侠指点
------解决方案--------------------
看提示,是数组越界
------解决方案--------------------
vt_row里面没有东西吧
------解决方案--------------------
建议楼主把代码格式化下,看的头疼,还有java命名规则仔细看下,既然是java就用java的命名规则,别使用c++这种规则

异常地方在
vc.add(rs.getString(5));
vc.add(rs.getString(3));
vc.add(rs.getString(4));
new_Jframe.dtm.addRow(vc);

这几句代码,不是class jframe这个类,定位错误的方法你可以先简单加几个值,看看能不能显示
例如:
	public static void main(String[] args) {
// TODO Auto-generated method stub

jframe new_Jframe = new jframe();
Vector<String> vc = new Vector<String>(30, 10);
vc.add("111");
vc.add("121");
vc.add("131");
new_Jframe.dtm.addRow(vc);
// try {
// // 加载驱动
// Class.forName("oracle.jdbc.driver.OracleDriver");
// // 得到连接,thin为数据库驱动模式,ORCL为数据库名,client_base为用户名和密码
// Connection conn = DriverManager.getConnection(
// "jdbc:oracle:thin:@127.0.0.1:1521:ORCL", "client_base",
// "client_base");
// // 向数据库发送指令
// Statement sm = conn.createStatement();
// ResultSet rs = sm.executeQuery("select * from CC_MEMBER");
// while (rs.next()) {
// vc.add(rs.getString(5));
// vc.add(rs.getString(3));
// vc.add(rs.getString(4));
// new_Jframe.dtm.addRow(vc);
// vc.clear();
// }
// } catch (Exception e) {
// // TODO: handle exception
// e.printStackTrace();
// }
}

main方法修改如下,楼主可以试试,完全没问题,说明问题出在写入Vector
------解决方案--------------------
刚看了,问题在
vc.clear();
这句,楼主要认真小心啊,你表格中使用的是vc中的数据,但是你清空了,内存中什么都没有了,怎么可能显示出来呢?直接注释掉这句就可以了。
------解决方案--------------------
稍微秒了一眼
1. 你的数据绑定里面好像没有数据,检查你的TableModel
2. 你的addRow之后没有刷新TableModel
3. 说实话估计是你的第一个程序,代码是copy过来的,Vector这个东西在JAVA里面应该少用
======================================================================
一般我都不回,稍微拍点砖,原谅!
  相关解决方案