使用GSON将具有JavaFX CheckBox属性的对象转换为JSON字符串时出错

wz1wpwve  于 2022-11-06  发布在  Java
关注(0)|答案(1)|浏览(213)

To explain things briefly, I have a Task object I want to convert to a JSON string using the GSON library. The object itself has String and int attributes, which I can convert to JSON just fine, however when I add a CheckBox attribute to the class, this error message appears

Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private javafx.beans.property.BooleanProperty javafx.scene.control.CheckBox.indeterminate accessible: module javafx.controls does not "opens javafx.scene.control" to module gson at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:349) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:289) at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:174) at java.base/java.lang.reflect.Field.setAccessible(Field.java:168) at gson@2.8.2/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:157) at gson@2.8.2/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) at gson@2.8.2/com.google.gson.Gson.getAdapter(Gson.java:423) at gson@2.8.2/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) at gson@2.8.2/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) at gson@2.8.2/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) at gson@2.8.2/com.google.gson.Gson.getAdapter(Gson.java:423) at gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:661) at gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:648) at gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:603) at gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:583) at IAssessment/application.AddTaskController.addTask(AddTaskController.java:45)

I had something similar beforehand and I asked about it here (the error message was ending in does not export to gson) and the solution was to create a class module-info that looks like this

  1. exports snippet;
  2. exports application;
  3. requires gson;
  4. requires java.sql;
  5. requires javafx.base;
  6. requires javafx.controls;
  7. requires javafx.fxml;
  8. requires javafx.graphics;
  9. opens application to gson, javafx.fxml;

This solved my previous problem but this seems to be a similar problem for which I don't know what to do. So is there a way to solve it? I appreciate any and all help.

6kkfgxo0

6kkfgxo01#

我想出来了

  1. (tablecolumnname).setCellFactory(new Callback<TableColumn<(object), Boolean>, TableCell<(object), Boolean>>() {
  2. public TableCell<(object), Boolean> call(TableColumn<(object), Boolean> p) {
  3. return new CheckBoxTableCell<(object), Boolean>();
  4. }
  5. });

相关问题