我得到了以下代码并且存在此错误(我尽量保持代码尽可能短,忽略getColumnCount等函数只是构造函数):
以下代码用于通过SQLite语句在Swing中创建JTable,我需要复选框的布尔值(是的,我知道我必须编辑/添加一个函数,但我想保持代码尽可能小)
代码:
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[]
并填写了布尔人,然后将Object[
]添加到data[][]
中,但这也无效。
我希望有人可以帮助我,谢谢。
格尔茨。
答案 0 :(得分: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 :(得分:1)
你的数组需要一个String作为dataType,另一方面你试图将一个布尔值放入其中。
data[counter][10] = true;
一个简单的解决方案是使用字符串"true"
而不是原始的booleantype(或将其解析为字符串)
data[counter][10] = "true";
答案 2 :(得分:0)
您不能将布尔值插入String数组。这就是问题:
data = new String[result][11];
data[counter][10] = true;
至少将其作为String插入并在必要时解析它。
答案 3 :(得分:0)
您已将data
定义为Objects的矩阵,但将其实例化为String的矩阵。
这就是为什么在运行时,你有这种类型不匹配的例外。
将它实例化为:
Object[][] o = new Object[1][6];
或 用string:
替换boolean值data[counter][10] = "true";
答案 4 :(得分:0)
问题在于:
data = new String[result][11];
声明String数组并执行此操作
data[counter][10] = true;
您有两种选择:
将数据声明为
new Object[result][11];
put string而不是boolean
data[counter][10] = Boolean.TRUE.toString();