AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 ошибка для JTable

Я пытаюсь выбрать дату из своей базы данных SQL и поместить в JTable, но постоянно получаю сообщение об ошибке:

'AWT-EventQueue-0' java.lang.ArrayIndexOutOfBoundsException: 0'

Не совсем уверен, почему. Это мой код:

table = new JTable();

try {
    Connection MyConn = null;
    Statement statement = null;
    ResultSet rs = null;

    Class.forName("com.mysql.jdbc.Driver");
    MyConn = DriverManager.getConnection("jdbc:mysql:"
            + "//localhost/eventbooking", "root", "Passw0rd");
    statement = MyConn.createStatement();
    rs = statement.executeQuery("SELECT * FROM `events` WHERE `Date Of Event` = '30/03/2014'");
    int i=0;
    while (rs.next()) {
        Object a = rs.getString("Date Of Event");
        Object b = rs.getString("Tickets Available");
        Object c = rs.getString("Price Of Event");
        Object d = rs.getString("Start Time");

        table.setRowSorter(null);
        table.getModel().setValueAt(a, i, 0 );
        table.getModel().setValueAt(b, i, 1);
        table.getModel().setValueAt(c, i, 2);
        table.getModel().setValueAt(d, i, 3);
        EventDiary.this.add(table);         
        System.out.println(i);
        i++;
    }

person broliverparker    schedule 02.03.2014    source источник
comment
вопрос в этой форме вообще не отвечает, код не говорит ни о чем, чтобы сравнить с описанием из вашего вопроса   -  person mKorbel    schedule 03.03.2014
comment
@mKorbel: Наоборот, в нем достаточно подробностей. ;)   -  person t0mppa    schedule 03.03.2014


Ответы (1)


Проблема в том, что вы создаете JTable по умолчанию, у которого есть TableModel, который состоит из вектора без элементов в нем. Затем вы пытаетесь установить элемент с индексом 0 указанного вектора, который на данный момент не существует, и вуаля: вы сталкиваетесь с проблемой.

Например:

JTable table = new JTable();
table.getModel().setValueAt("i", 0, 0);

System.out.println(table);

Результат:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
    at java.util.Vector.elementAt(Vector.java:470)
    at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:665)
    at com.stackoverflow.answer.JTableTest.main(JTableTest.java:9)

В то время как следующее, например:

JTable table = new JTable(1, 1);
table.getModel().setValueAt("i", 0, 0);

System.out.println(table);

Результат:

javax.swing.JTable[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=251658568,maximumSize=,minimumSize=,preferredSize=,autoCreateColumnsFromModel=true,autoResizeMode=AUTO_RESIZE_SUBSEQUENT_COLUMNS,cellSelectionEnabled=false ,editingColumn=-1,editingRow=-1,gridColor=javax.swing.plaf.ColorUIResource[r=255,g=255,b=255],preferredViewportSize=java.awt.Dimension[width=450,height=400] ,rowHeight=16,rowMargin=1,rowSelectionAllowed=true,selectionBackground=com.apple.laf.AquaImageFactory$SystemColorProxy[r=44,g=93,b=205],selectionForeground=com.apple.laf.AquaImageFactory$SystemColorProxy[ r=255,g=255,b=255],showHorizontalLines=true,showVerticalLines=true]

Таким образом, если вы хотите сохранить свой способ ведения дел, вы должны заранее добавить строки и столбцы.

Другой способ сделать это:

JTable table = new JTable();

DefaultTableModel model = (DefaultTableModel) table.getModel();
model.addColumn("id");
model.addColumn("name");

Object[] row = new Object[2];
row[0] = 1;
row[1] = "John";

model.addRow(row);

row = new Object[2];
row[0] = 2;
row[1] = "Jack";

model.addRow(row);

for (int i = 0; i < model.getRowCount(); i++) {
    for (int j = 0; j < model.getColumnCount(); j++) {
        System.out.println("column: " + model.getColumnName(j) + ", row #" + i + ", value: " + model.getValueAt(i, j));
    }
}

В результате чего:

column: id, row #0, value: 1
column: name, row #0, value: John
column: id, row #1, value: 2
column: name, row #1, value: Jack
person t0mppa    schedule 02.03.2014
comment
я тоже изменил код JTable table = new JTable(1, 1); но теперь я получаю еще одну ошибку в следующей строке: «java.lang.ArrayIndexOutOfBoundsException: 1 ›= 1» - person broliverparker; 03.03.2014
comment
Отредактированный ответ для ясности. - person t0mppa; 03.03.2014