2013-07-30 3 views
0

я получил следующий код, и есть эта ошибка (я пытался сохранить код как можно короче, игнорировать и т.д. Функции getColumnCount только конструктор):Java Boolean в Object [] []

Следующий код используется для создания JTable в Swing с помощью инструкции SQLite, мне нужны булевы для флажков (да, я знаю, что мне нужно отредактировать/добавить функцию, но я хотел бы сохранить код как можно меньше).

Код:

package view; 

import java.sql.ResultSet; 
import java.sql.SQLException; 

import javax.swing.table.AbstractTableModel; 

import controller.Database; 

class Test extends AbstractTableModel { 
     Database db = new Database(); 
     ResultSet rs; 

     private String[] columnNames = {"Vorname", "Nachname", "E-Mail", "Anrede", "Jahrgang", "Ablösung", "Scheibe", "Waffe", "Gruppe", "Verpflegung", "Aktiv"}; 
     Object[][] data; 

     public Test(){ 
      int result = 0; 
      try { 
       rs = db.stat.executeQuery("select count(*) as schuetzencount from schuetze;"); 
       result = Integer.parseInt(rs.getString("schuetzencount")); 
       data = new String[result][11]; 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      try { 
       rs = db.stat.executeQuery("select * from schuetze as s join waffe as w on w.Waffe_ID = s.Waffe_ID join gruppe as g on g.Gruppe_ID = s.Gruppe_ID join anrede as a on a.Anrede_ID = s.Anrede_ID join verpflegung as v on v.Verpflegung_ID = s.Verpflegung_ID;"); 
       int counter = 0; 
       while(rs.next()){ 

        data[counter][1] = rs.getString("Schuetze_Nachname"); 
        data[counter][0] = rs.getString("Schuetze_Vorname"); 
        data[counter][4] = rs.getString("Schuetze_Jahrgang"); 
        data[counter][2] = rs.getString("Schuetze_Email"); 
        data[counter][5] = rs.getString("Schuetze_Abloesung"); 
        data[counter][6] = rs.getString("Schuetze_Scheibe"); 
        data[counter][7] = rs.getString("Waffe_Name"); 
        data[counter][8] = rs.getString("Gruppe_Name"); 
        data[counter][3] = rs.getString("Anrede_Name"); 
        data[counter][9] = rs.getString("Verpflegung_Name"); 
        data[counter][10] = true; 
        counter++; 
       } 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 

     @Override 
     public int getColumnCount() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public int getRowCount() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public Object getValueAt(int arg0, int arg1) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     public static void main(String[] args) { 
      Test t = new Test(); 
     } 
    } 

Ошибка:

Exception in thread "main" java.lang.ArrayStoreException: java.lang.Boolean 
at view.Test.<init>(Test.java:43) 
at view.Test.main(Test.java:72) 

Если я сделаю

Object[][] data = {{"Test", "Test","Test","Test","Test","Test","Test","Test","Test","Test",true}} 

это работает, но это не то, что мне нужно. Затем я попытался сделать Object[] и заполнить Booleans, а затем добавить Object[] в data[][], но это также не сработало.

Я надеюсь, что кто-то может мне помочь, спасибо.

Greetz.

+1

Качели? SQL? Пожалуйста, урежьте свой вопрос на то, что необходимо для воспроизведения вашей проблемы. –

+0

Вы пытаетесь сохранить логическое значение в элементе массива String. Просто потому, что вы объявляете переменную как тип Object, не означает, что вы можете это сделать. Если вы построите новый массив Object [...] [...], тогда 'true' будет автоматически преобразован в объект Boolean. –

ответ

5

Вы Array из Strings и попытаться поставить Boolean там в строке

data[counter][10] = true; 

Это не допускается.

Когда Вы делаете

Object[][] data = {{"Test", "Test","Test","Test","Test","Test","Test","Test","Test","Test",true}} 

Java создает для вас массив Objects , как:

Object[][] o = new Object[1][6]; 
o[0][2] = true; // it works 
1

Ваш массив ожидает строку DATATYPE, с другой стороны, вы пытаетесь поставить логическое внутрь.

data[counter][10] = true; 

простое решение для этого использует строку "true" вместо примитивного booleantype (или разобрать его в строку)

data[counter][10] = "true"; 
+0

Или, возможно, предпочтительнее инициализировать массив, поскольку он объявлен с данными = новый Объект [результат] [11] – Lesstat

0

Вы не можете вставить логическое значение массива String. В этом и заключается проблема:

data = new String[result][11]; 
data[counter][10] = true; 

По крайней мере, вставьте его как строку и проанализируйте его, когда это необходимо.

0

Вы определили data как матрицу объектов, но создали его как матрицу String. Вот почему во время выполнения вы имеете исключение несоответствия типа.

Либо инстанцирует это нравится:

Object[][] o = new Object[1][6]; 

или заменить логическое значение со строкой:

data[counter][10] = "true"; 
0

Проблема здесь:

data = new String[result][11];

Вы объявляете массив Строка, и вы делаете это

data[counter][10] = true;

У вас есть два варианта:

  1. декларировать данные в

    new Object[result][11];

  2. пут строки вместо булевой

data[counter][10] = Boolean.TRUE.toString();

+0

О, спасибо, поэтому небольшая ошибка, и я ищу сейчас более 1 часа для этой проблемы, не видел, новый объект [] []. Спасибо за помощь, теперь работает отлично. – faebuk

Смежные вопросы