【问题标题】:Java Boolean into Object[][]Java 布尔值转换为 Object[][]
【发布时间】:2013-07-30 13:13:22
【问题描述】:

我得到了以下代码并且出现了这个错误(我试图使代码尽可能短,忽略 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[][] 中,但这也没有用。

希望有人能帮助我,谢谢。

问候。

【问题讨论】:

  • 摇摆? SQL?请将您的问题缩减为重现您的问题所必需的内容。
  • 您正在尝试将布尔值存储到字符串数组元素中。仅仅因为您将变量声明为 Object 类型,并不意味着您可以这样做。如果你构造一个新的 Object[...][...] 数组,那么true 会自动转换为布尔对象。

标签: java swing jtable boolean abstracttablemodel


【解决方案1】:

您有 ArrayStrings 并尝试将 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

【讨论】:

    【解决方案2】:

    您的数组需要一个字符串作为数据类型,另一方面,您是否尝试将布尔值放入其中。

    data[counter][10] = true;
    

    一个简单的解决方案是使用字符串"true"而不是原始布尔类型(或将其解析为字符串)

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

    【讨论】:

    • 或者最好初始化数组,因为它声明为 data = new Object[result][11]
    【解决方案3】:

    您不能将布尔值插入字符串数组。这就是问题所在:

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

    至少将其作为字符串插入并在必要时对其进行解析。

    【讨论】:

      【解决方案4】:

      您已将data 定义为对象矩阵,但将其实例化为字符串矩阵。 这就是为什么在运行时会出现这种类型不匹配异常。

      要么像这样实例化它:

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

      或 用字符串替换布尔值:

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

      【讨论】:

        【解决方案5】:

        问题出在这里:

        data = new String[result][11];

        你声明了 String 的数组然后你这样做了

        data[counter][10] = true;

        你有两个选择:

        1. 将数据声明为

          new Object[result][11];

        2. 用字符串代替布尔值

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

        【讨论】:

        • 哦,谢谢,这是一个小错误,我现在搜索了大约 1 个多小时来解决这个问题,但没有看到它我坚持我创建了新的 Object[][]。感谢您的帮助,现在可以正常使用了。
        猜你喜欢
        • 1970-01-01
        • 2016-07-30
        • 2019-07-24
        • 2021-06-27
        • 1970-01-01
        • 2018-01-24
        • 2011-04-17
        • 2015-09-27
        相关资源
        最近更新 更多