异常:生成不完整 JSON
Exception: Generating incomplete JSON
我有以下方法生成带有给定参数的 json 文件,如果该文件存在,它会读取它以获取数据,然后将新信息附加到它。基本上,我在没有创建 json 文件的情况下收到此错误。
public void cargarVentasDiaMesaJson(Mesas m, double total) {
FileInputStream fI = null;
JsonReader jRe = null;
FileOutputStream f = null;
JsonWriter jR = null;
try {
f = new FileOutputStream("C:\archivos\VentasDiaMesa.json");
jR = Json.createWriter(f);
JsonObjectBuilder obj = Json.createObjectBuilder();
JsonArrayBuilder arrayB = Json.createArrayBuilder();
File file = new File("C:\archivos\VentasDiaMesa.json");
if(file.exists()) {
fI = new FileInputStream("C:\archivos\VentasDiaMesa.json");
jRe = Json.createReader(fI);
JsonObject jsonR = jRe.readObject();
JsonArray array = jsonR.getJsonArray("ventasDiaMesa");
for(int i=0; i<array.size(); i++) {
JsonObject vDiaMesa = array.getJsonObject(i);
String fecha = vDiaMesa.getString("fecha");
int numero = vDiaMesa.getInt("numero");
double tot = Double.parseDouble(vDiaMesa.getString("total"));
JsonObjectBuilder diaMesa = Json.createObjectBuilder();
diaMesa.add("fecha", fecha);
diaMesa.add("numero", numero);
diaMesa.add("total", tot);
JsonObject objLinea = diaMesa.build();
arrayB.add(objLinea);
}
}
JsonObjectBuilder diaMesa = Json.createObjectBuilder();
Calendar fecha = Calendar.getInstance();
String mes = (fecha.get(Calendar.MONTH)+1)<10?"0"+(fecha.get(Calendar.MONTH)+1):""+(fecha.get(Calendar.MONTH)+1);
String dia = fecha.get(Calendar.DATE)<10?"0"+fecha.get(Calendar.DATE):""+fecha.get(Calendar.DATE);
String date = "" + fecha.get(Calendar.YEAR) + mes + dia;
diaMesa.add("fecha", date);
String numero = (m.getNumero()<10)?"0"+m.getNumero():""+m.getNumero();
diaMesa.add("numero", numero);
String tot = Double.toString(total);
while(tot.length() != 10) {
tot = "0" + tot;
}
diaMesa.add("total", tot);
JsonObject objLinea = diaMesa.build();
arrayB.add(objLinea);
JsonArray arr = arrayB.build();
obj.add("ventasDiaMesa", arr);
JsonObject obbbj = obj.build();
jR.writeObject(obbbj);
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
} finally {
jR.close();
}
}
我收到以下错误消息
Exception in thread "AWT-EventQueue-0" javax.json.stream.JsonGenerationException: Generating incomplete JSON
at org.glassfish.json.JsonGeneratorImpl.close(JsonGeneratorImpl.java:509)
at org.glassfish.json.JsonWriterImpl.close(JsonWriterImpl.java:150)
at Modelo.DAO.VentasDiaMesaJSON.cargarVentasDiaMesaJson(VentasDiaMesaJSON.java:77)
at Controlador.ControladorPedidos.totalMesa(ControladorPedidos.java:94)
at Controlador.ControladorPedidos.cerrarDia(ControladorPedidos.java:119)
at Vista.PedidosGUI.actionPerformed(PedidosGUI.java:50)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access0(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
我正在创建 3 个对象构建器,然后继续构建,最后在关闭文件之前编写主要对象。我在这里看不到错误。有什么想法吗?
谢谢
我相信您正在同时读取和写入同一个文件。当您碰巧再次写入文件时,输入流也不会关闭。这可能会使作者处于一种奇怪的状态。能否请您尝试进行以下调整。
public void cargarVentasDiaMesaJson(Mesas m, double total) {
String fileName = "C:\archivos\VentasDiaMesa.json";
try {
JsonObjectBuilder obj = Json.createObjectBuilder();
JsonArrayBuilder arrayB = Json.createArrayBuilder();
File file = new File(fileName);
if (file.exists()) {
// Try-with-resources: will auto-close JsonReader and inputStream
// >> close() of this stream was missing in original code
try (JsonReader jRe = Json.createReader(new FileInputStream(file))) {
JsonObject jsonR = jRe.readObject();
JsonArray array = jsonR.getJsonArray("ventasDiaMesa");
for (int i = 0; i < array.size(); i++) {
JsonObject vDiaMesa = array.getJsonObject(i);
String fecha = vDiaMesa.getString("fecha");
int numero = vDiaMesa.getInt("numero");
double tot = Double.parseDouble(vDiaMesa.getString("total"));
JsonObjectBuilder diaMesa = Json.createObjectBuilder();
diaMesa.add("fecha", fecha);
diaMesa.add("numero", numero);
diaMesa.add("total", tot);
JsonObject objLinea = diaMesa.build();
arrayB.add(objLinea);
}
}
}
JsonObjectBuilder diaMesa = Json.createObjectBuilder();
Calendar fecha = Calendar.getInstance();
String mes = (fecha.get(Calendar.MONTH) + 1) < 10 ? "0" + (fecha.get(Calendar.MONTH) + 1) : "" + (fecha.get(Calendar.MONTH) + 1);
String dia = fecha.get(Calendar.DATE) < 10 ? "0" + fecha.get(Calendar.DATE) : "" + fecha.get(Calendar.DATE);
String date = "" + fecha.get(Calendar.YEAR) + mes + dia;
diaMesa.add("fecha", date);
String numero = (m.getNumero() < 10) ? "0" + m.getNumero() : "" + m.getNumero();
diaMesa.add("numero", numero);
String tot = Double.toString(total);
while (tot.length() != 10) {
tot = "0" + tot;
}
diaMesa.add("total", tot);
JsonObject objLinea = diaMesa.build();
arrayB.add(objLinea);
JsonArray arr = arrayB.build();
obj.add("ventasDiaMesa", arr);
JsonObject obbbj = obj.build();
// (Re)Write object
// >> Opening of this stream was made too early in original code.
JsonWriter jR;
try {
jR = Json.createWriter(new FileOutputStream(fileName));
jR.writeObject(obbbj);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
jR.close();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
如果您在发布之前清理代码,我们将不胜感激。它几乎不可读。我建议至少:
- 通过为您的变量和 CamelCase 提供人类可读的名称来使用正确的变量命名。尽量避免使用单字母和双字母名称。
- 创建更多方法
- 帮助你的代码呼吸
- 减少无用(一次性)变量或引用
例如:
public void cargarVentasDiaMesaJson(Mesas m, double total) {
String fileName = "C:\archivos\VentasDiaMesa.json";
try {
JsonArrayBuilder updReadArrayB = Json.createArrayBuilder();
File file = new File(fileName);
if (file.exists()) {
// Try-with-resources: will auto-close JsonReader and inputStream
// >> close() of this stream was missing in original code
try (JsonReader jReader = Json.createReader(new FileInputStream(file))) {
readPrepareObject(jReader, updReadArrayB);
} catch (IOException ex) {
// Cannot read file
ex.printStackTrace();
}
JsonObject outJsonObj = rebuildObject(m, total, updReadArrayB, Json.createObjectBuilder());
// (Re)Write object
// >> Opening of this stream was made too early in original code.
JsonWriter jWriter;
try {
jWriter = Json.createWriter(new FileOutputStream(fileName));
jWriter.writeObject(outJsonObj);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
jWriter.close();
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private void readPrepareObject(final JsonReader jRe, JsonArrayBuilder arrayB) throws NumberFormatException {
JsonObject jsonR = jRe.readObject();
JsonArray array = jsonR.getJsonArray("ventasDiaMesa");
for (int i = 0; i < array.size(); i++) {
JsonObject vDiaMesa = array.getJsonObject(i);
String fecha = vDiaMesa.getString("fecha");
int numero = vDiaMesa.getInt("numero");
double tot = Double.parseDouble(vDiaMesa.getString("total"));
JsonObjectBuilder diaMesa = Json.createObjectBuilder();
diaMesa.add("fecha", fecha);
diaMesa.add("numero", numero);
diaMesa.add("total", tot);
arrayB.add(diaMesa.build());
}
}
private JsonObject rebuildObject(Mesas m, double total, JsonArrayBuilder arrayB, JsonObjectBuilder obj) {
JsonObjectBuilder diaMesa = Json.createObjectBuilder();
Calendar fecha = Calendar.getInstance();
String mes = (fecha.get(Calendar.MONTH) + 1) < 10 ? "0" + (fecha.get(Calendar.MONTH) + 1) : "" + (fecha.get(Calendar.MONTH) + 1);
String dia = fecha.get(Calendar.DATE) < 10 ? "0" + fecha.get(Calendar.DATE) : "" + fecha.get(Calendar.DATE);
String date = "" + fecha.get(Calendar.YEAR) + mes + dia;
diaMesa.add("fecha", date);
String numero = (m.getNumero() < 10) ? "0" + m.getNumero() : "" + m.getNumero();
diaMesa.add("numero", numero);
String tot = Double.toString(total);
while (tot.length() != 10) {
tot = "0" + tot;
}
diaMesa.add("total", tot);
JsonObject objLinea = diaMesa.build();
arrayB.add(objLinea);
JsonArray arr = arrayB.build();
obj.add("ventasDiaMesa", arr);
return obj.build();
}
请注意我没有检查(几乎没有修改)你的Json操作说明。
最后但同样重要的是:不要在 AWT 事件线程中执行长的、阻塞的或与 IO 相关的代码。您应该使用 ExecutorService 来执行 AWT 事件队列之外的大部分逻辑。
我有以下方法生成带有给定参数的 json 文件,如果该文件存在,它会读取它以获取数据,然后将新信息附加到它。基本上,我在没有创建 json 文件的情况下收到此错误。
public void cargarVentasDiaMesaJson(Mesas m, double total) {
FileInputStream fI = null;
JsonReader jRe = null;
FileOutputStream f = null;
JsonWriter jR = null;
try {
f = new FileOutputStream("C:\archivos\VentasDiaMesa.json");
jR = Json.createWriter(f);
JsonObjectBuilder obj = Json.createObjectBuilder();
JsonArrayBuilder arrayB = Json.createArrayBuilder();
File file = new File("C:\archivos\VentasDiaMesa.json");
if(file.exists()) {
fI = new FileInputStream("C:\archivos\VentasDiaMesa.json");
jRe = Json.createReader(fI);
JsonObject jsonR = jRe.readObject();
JsonArray array = jsonR.getJsonArray("ventasDiaMesa");
for(int i=0; i<array.size(); i++) {
JsonObject vDiaMesa = array.getJsonObject(i);
String fecha = vDiaMesa.getString("fecha");
int numero = vDiaMesa.getInt("numero");
double tot = Double.parseDouble(vDiaMesa.getString("total"));
JsonObjectBuilder diaMesa = Json.createObjectBuilder();
diaMesa.add("fecha", fecha);
diaMesa.add("numero", numero);
diaMesa.add("total", tot);
JsonObject objLinea = diaMesa.build();
arrayB.add(objLinea);
}
}
JsonObjectBuilder diaMesa = Json.createObjectBuilder();
Calendar fecha = Calendar.getInstance();
String mes = (fecha.get(Calendar.MONTH)+1)<10?"0"+(fecha.get(Calendar.MONTH)+1):""+(fecha.get(Calendar.MONTH)+1);
String dia = fecha.get(Calendar.DATE)<10?"0"+fecha.get(Calendar.DATE):""+fecha.get(Calendar.DATE);
String date = "" + fecha.get(Calendar.YEAR) + mes + dia;
diaMesa.add("fecha", date);
String numero = (m.getNumero()<10)?"0"+m.getNumero():""+m.getNumero();
diaMesa.add("numero", numero);
String tot = Double.toString(total);
while(tot.length() != 10) {
tot = "0" + tot;
}
diaMesa.add("total", tot);
JsonObject objLinea = diaMesa.build();
arrayB.add(objLinea);
JsonArray arr = arrayB.build();
obj.add("ventasDiaMesa", arr);
JsonObject obbbj = obj.build();
jR.writeObject(obbbj);
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
} finally {
jR.close();
}
}
我收到以下错误消息
Exception in thread "AWT-EventQueue-0" javax.json.stream.JsonGenerationException: Generating incomplete JSON
at org.glassfish.json.JsonGeneratorImpl.close(JsonGeneratorImpl.java:509)
at org.glassfish.json.JsonWriterImpl.close(JsonWriterImpl.java:150)
at Modelo.DAO.VentasDiaMesaJSON.cargarVentasDiaMesaJson(VentasDiaMesaJSON.java:77)
at Controlador.ControladorPedidos.totalMesa(ControladorPedidos.java:94)
at Controlador.ControladorPedidos.cerrarDia(ControladorPedidos.java:119)
at Vista.PedidosGUI.actionPerformed(PedidosGUI.java:50)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access0(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
我正在创建 3 个对象构建器,然后继续构建,最后在关闭文件之前编写主要对象。我在这里看不到错误。有什么想法吗?
谢谢
我相信您正在同时读取和写入同一个文件。当您碰巧再次写入文件时,输入流也不会关闭。这可能会使作者处于一种奇怪的状态。能否请您尝试进行以下调整。
public void cargarVentasDiaMesaJson(Mesas m, double total) {
String fileName = "C:\archivos\VentasDiaMesa.json";
try {
JsonObjectBuilder obj = Json.createObjectBuilder();
JsonArrayBuilder arrayB = Json.createArrayBuilder();
File file = new File(fileName);
if (file.exists()) {
// Try-with-resources: will auto-close JsonReader and inputStream
// >> close() of this stream was missing in original code
try (JsonReader jRe = Json.createReader(new FileInputStream(file))) {
JsonObject jsonR = jRe.readObject();
JsonArray array = jsonR.getJsonArray("ventasDiaMesa");
for (int i = 0; i < array.size(); i++) {
JsonObject vDiaMesa = array.getJsonObject(i);
String fecha = vDiaMesa.getString("fecha");
int numero = vDiaMesa.getInt("numero");
double tot = Double.parseDouble(vDiaMesa.getString("total"));
JsonObjectBuilder diaMesa = Json.createObjectBuilder();
diaMesa.add("fecha", fecha);
diaMesa.add("numero", numero);
diaMesa.add("total", tot);
JsonObject objLinea = diaMesa.build();
arrayB.add(objLinea);
}
}
}
JsonObjectBuilder diaMesa = Json.createObjectBuilder();
Calendar fecha = Calendar.getInstance();
String mes = (fecha.get(Calendar.MONTH) + 1) < 10 ? "0" + (fecha.get(Calendar.MONTH) + 1) : "" + (fecha.get(Calendar.MONTH) + 1);
String dia = fecha.get(Calendar.DATE) < 10 ? "0" + fecha.get(Calendar.DATE) : "" + fecha.get(Calendar.DATE);
String date = "" + fecha.get(Calendar.YEAR) + mes + dia;
diaMesa.add("fecha", date);
String numero = (m.getNumero() < 10) ? "0" + m.getNumero() : "" + m.getNumero();
diaMesa.add("numero", numero);
String tot = Double.toString(total);
while (tot.length() != 10) {
tot = "0" + tot;
}
diaMesa.add("total", tot);
JsonObject objLinea = diaMesa.build();
arrayB.add(objLinea);
JsonArray arr = arrayB.build();
obj.add("ventasDiaMesa", arr);
JsonObject obbbj = obj.build();
// (Re)Write object
// >> Opening of this stream was made too early in original code.
JsonWriter jR;
try {
jR = Json.createWriter(new FileOutputStream(fileName));
jR.writeObject(obbbj);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
jR.close();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
如果您在发布之前清理代码,我们将不胜感激。它几乎不可读。我建议至少:
- 通过为您的变量和 CamelCase 提供人类可读的名称来使用正确的变量命名。尽量避免使用单字母和双字母名称。
- 创建更多方法
- 帮助你的代码呼吸
- 减少无用(一次性)变量或引用
例如:
public void cargarVentasDiaMesaJson(Mesas m, double total) {
String fileName = "C:\archivos\VentasDiaMesa.json";
try {
JsonArrayBuilder updReadArrayB = Json.createArrayBuilder();
File file = new File(fileName);
if (file.exists()) {
// Try-with-resources: will auto-close JsonReader and inputStream
// >> close() of this stream was missing in original code
try (JsonReader jReader = Json.createReader(new FileInputStream(file))) {
readPrepareObject(jReader, updReadArrayB);
} catch (IOException ex) {
// Cannot read file
ex.printStackTrace();
}
JsonObject outJsonObj = rebuildObject(m, total, updReadArrayB, Json.createObjectBuilder());
// (Re)Write object
// >> Opening of this stream was made too early in original code.
JsonWriter jWriter;
try {
jWriter = Json.createWriter(new FileOutputStream(fileName));
jWriter.writeObject(outJsonObj);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
jWriter.close();
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private void readPrepareObject(final JsonReader jRe, JsonArrayBuilder arrayB) throws NumberFormatException {
JsonObject jsonR = jRe.readObject();
JsonArray array = jsonR.getJsonArray("ventasDiaMesa");
for (int i = 0; i < array.size(); i++) {
JsonObject vDiaMesa = array.getJsonObject(i);
String fecha = vDiaMesa.getString("fecha");
int numero = vDiaMesa.getInt("numero");
double tot = Double.parseDouble(vDiaMesa.getString("total"));
JsonObjectBuilder diaMesa = Json.createObjectBuilder();
diaMesa.add("fecha", fecha);
diaMesa.add("numero", numero);
diaMesa.add("total", tot);
arrayB.add(diaMesa.build());
}
}
private JsonObject rebuildObject(Mesas m, double total, JsonArrayBuilder arrayB, JsonObjectBuilder obj) {
JsonObjectBuilder diaMesa = Json.createObjectBuilder();
Calendar fecha = Calendar.getInstance();
String mes = (fecha.get(Calendar.MONTH) + 1) < 10 ? "0" + (fecha.get(Calendar.MONTH) + 1) : "" + (fecha.get(Calendar.MONTH) + 1);
String dia = fecha.get(Calendar.DATE) < 10 ? "0" + fecha.get(Calendar.DATE) : "" + fecha.get(Calendar.DATE);
String date = "" + fecha.get(Calendar.YEAR) + mes + dia;
diaMesa.add("fecha", date);
String numero = (m.getNumero() < 10) ? "0" + m.getNumero() : "" + m.getNumero();
diaMesa.add("numero", numero);
String tot = Double.toString(total);
while (tot.length() != 10) {
tot = "0" + tot;
}
diaMesa.add("total", tot);
JsonObject objLinea = diaMesa.build();
arrayB.add(objLinea);
JsonArray arr = arrayB.build();
obj.add("ventasDiaMesa", arr);
return obj.build();
}
请注意我没有检查(几乎没有修改)你的Json操作说明。
最后但同样重要的是:不要在 AWT 事件线程中执行长的、阻塞的或与 IO 相关的代码。您应该使用 ExecutorService 来执行 AWT 事件队列之外的大部分逻辑。