Сбой Eclipse в приложении Swing - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь создать приложение Swing для просмотра структур JSON на этапе отладки / разработки более крупного приложения. Подход прост - (1) пройти по дереву JSON в режиме глубины сначала (b) для каждого узла создать соответствующий DefaultMutableTreeNode (c) вставить эти узлы в JTree и (d) поместить JTree в JScrollPane. Работает нормально для файла JSON / String размером до нескольких КБ.

Проблема: При использовании файлов JSON размером в несколько сотен КБ, я получаю графический интерфейс на экране в порядке, но после этого,Eclipse вылетает со следующим сообщением. Я подозреваю, что причина в том, как я создаю графический интерфейс. Это с Eclipse Neon, с Java 8, работающим на MacOS 10.14.6. Я попробовал модификацию - используйте метод createGUI () из потока Swing invokeLater (комментарий в закомментированных строках в коде для этого), но результаты те же.

Может кто-нибудь помочь с правильныммеханизм использования потока SwingWorker? Я не использовал Swing в течение долгого и долгого времени и, возможно, пропустил некоторые из последних событий. Еще одним источником путаницы является то, что я могу экспортировать проект из eclipse для создания исполняемого файла jar, и при вызове из командной строки (приглашение оболочки) приложение работает нормально.

Далее добавляется исходный код. Чтобы поместить его в свою собственную среду IDE и запустить его, требуется только внешняя библиотека "java-json.jar". Спасибо за вашу помощь.

Процесс: eclipse [50201] Путь:
/Applications/Eclipse.app/Contents/MacOS/eclipse Идентификатор:
org.eclipse.platform.ideВерсия: 4.6.0 (4.6.0.I20160606-1100) Тип кода: X86-64 (собственный) Родительский процесс: ??? [1] Ответственный: eclipse [50201] ИД пользователя: 1117050623

Дата / Время: 2019-10-06 11: 19: 55.970 -0700 Версия ОС:
Mac OS X 10.14.6 (18G95)Версия отчета: Версия 12 Bridge OS: 3.6 (16P6571) Анонимный UUID: 44A65B77-4733-DCB5-94D3-A96597022662

UUID сна / пробуждения: 0653A25E-D236-44CF-86ED-DB63F08A987A

1018 * *1017* 1018Время пробуждения с момента загрузки: 560000 секунд Время с пробуждения: 1900 секунд

Защита целостности системы: включено

Сбой потока: 0 Очередь отправки: com.apple.main-thread

Тип исключения: EXC_BAD_ACCESS (SIGABRT) Коды исключений:
KERN_INVALID_ADDRESS в 0x000000018e40cf7b Примечание об исключении:
EXC_CORPSE_NOTIFY

ВМ VM: 0x18e400000000000000000 - 3000000000000000* -> сопоставленный файл 000000018e464000-000000018e46c000 [32K] r - / rx SM = PRV Object_id = 3fca339b

Информация о приложении: проверка буфера: CGBlt_copyBytes: проверка буфера:
abort () называется

Нить 0 Crashed :: Очередь отправки: com.apple.main-thread 0
libsystem_kernel.dylib 0x00007fff607b82c6 __pthread_kill + 10 1 libsystem_pthread.dylib 0x00007fff60873bf1 pthread_kill + 284 2lib0000000000000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXBS запомнить до 2007(bool) + 25 4 libjvm.dylib 0x000000010858479e VMError :: report_and_die () + 2304 5 libjvm.dylib
0x0000000108461dfe JVM_handle_bsd_signal + 1131 6 libjvm.dylib *00000000000000000000000000000000000000000000000000000000000000000000 (0) * 0001 (0) * 0001 (0) * 0 (0) * 070 * 0 (0) * 0: 0 * * 0 (0) * * * * * * * * * * * * * 0 * 030
libsystem_platform.dylib 0x00007fff60868b5d _sigtramp + 29 8
??? 0x00007fff8906e670 sp3_gfx10_a_operand + 818512 9 com.apple.CoreGraphics 0x00007fff34b95391 CGBlt_copyBytes + 385 10 com.apple.CoreGraphics
0x00007fff34b722b4 argb32_image + 5324 11 com.apple.CoreGraphics
0x00007fff34b70ddf ripl_Mark + 22 12 com.apple.CoreGraphics
0x00007fff34b70db4 RIPLayerBltImage + 1018 13 com.apple.CoreGraphics 0x00007fff34b706f6 ripc_RenderImage + 228 14 com.apple.CoreGraphics 0x00007fff34b64371 ripc_DrawImage + 812 15 com.apple.CoreGraphics
0x00007fff34b64036 CGContextDelegateDrawImage + 41 16 com.apple.AppKit 0x00007fff31f25397 __backing_store_DrawImage_block_invoke + 55 17 ком. apple.AppKit 0x00007fff31f24260 backing_store_delegate + 893 18 com.apple.AppKit 0x00007fff32240665 backing_store_DrawImage.llvm.2329424099933660171 + 509 19 com.apple.CoreGraphics 0x00007fff34b64036 CGContextDelegateDrawImage + 41 20 com.apple.AppKit
0x00007fff322414e6 backing_store_DrawWindowContents.llvm.2329424099933660171 + 1075 21 ком.apple.CoreGraphics 0x00007fff34be1e52 CGContextDelegateDrawWindowContents + 59 22 com.apple.SkyLight * * 0x00007fff59a64507 одна тысяча сорок пять SLContextCopyWindowContentsToRect + 163 23 com.apple.AppKit 0x00007fff32153858 _NXScroll + 1463 24 libswt-пи-какао-4623.jnilib 0x0000000159937139 Java_org_eclipse_swt_internal_cocoa_OS_NSCopyBits + 187 25 ???
0x0000000120018427 0 + 4831937575 26 ???
0x0000000120007ffd 0 + 4831870973 27 ???
0x0000000120007ffd 0 + 4831870973 28 ???
0x0000000120007ffd 0 + 4831870973 29 ?? ??? + 4831870973 34 ???
0x0000000120007ffd 0 + 4831870973 35 ???
0x0000000120007ffd 0 + 4831870973 36 ???
0x0000000120008042 0 + 4831871042 37 ???
0x000000012317 08000706 000 080 800 0* * 0x0000000120a39674 тысяча пятьдесят-девять 0 + 4842559092 39 ???
0x0000000120008042 0 + 4831871042 40 ???
0x0000000120007ffd 0 + 4831870973 41 ???
0x0000000120007e54 0 + 4831870548 42 ???
0x0000000120007ffd 0 +4831870973 43 ???
0x0000000120008042 0 + 4831871042 44 ???
0x0000000120007ffd 0 + 4831870973 45 ???
0x0000000120007a40 0+ 4831869504 46 ???
0x0000000120007a40 0 + 4831869504 47 ???
0x0000000120007e54 0 + 4831870548 48 ???
0x0000000120007e54 0 + 4831870548 49 ???
0x000000012000 070 800702000
0x0000000120007d80 0 + 4831870336 51 ???
0x0000000120007d80 0 + 4831870336 52 ???
0x00000001200004e7 0 + 4831839463 53 libjvm.dylib
0x00000001algualls, Thread *) + 1710 54 libjvm.dylib
0x00000001084a80c4 Reflection :: invoke (instanceKlassHandle, methodHandle, дескриптор, bool, objArrayHandle, BasicType, objArrayHandle, bool, Thread *) + 3602 55 libjvm.dyb * 10000084000000000000000000000000000000000000000000000000000000000000000000000000000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0055555 всех всех всех всех всех всех * всех 0: invoke_method (oopDesc ​​*, Handle, objArrayHandle, Thread *) + 364 56 libjvm.dylib
0x000000010831de40 JVM_InvokeMethod + 358 57 ???
0x0000000120018427 0 + 4831937575 0310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000??
0x0000000120007d80 0 + 4831870336 60 ???
0x0000000120007e54 0 +4831870548 61 ???
0x0000000120007d80 0 + 4831870336 62 ???
0x0000000120007ffd 0 + 4831870973 63 ???
0x0000000120007ffd 0 + 4831870973 64 ???
0x00000046003131jb01086 * 0x00000001082e255a JavaCalls :: call_helper (JavaValue *, methodHandle *, JavaCallArguments *, Thread *) + 1710 66 libjvm.dylib
0x00000001082fcf6a jni_invoke_nonstatic (JNIEn_jpg_jpg)JNI_ArgumentPusher *, Thread *) + 748 67 libjvm.dylib 0x00000001082ee5e2 jni_CallIntMethod + 363 68 eclipse_1615.so
0x0000000100586bb2 startJavaJNI + 2138 69 eclipse_1615.so
0x0000000100585597 startJavaVM + 9 70 eclipse_1615.so
0x00000001005835a5 _run + 4196 71 eclipse_1615.so 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000+ 1819 73 org.eclipse. 0x00007fff6087456e _pthread_cond_wait + 722 2 libjvm.dylib
0x000000010845c75a os :: PlatformEvent :: park () + 192 3 libjvm.dylib
0x000000010843a776 ParkCommon (4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 (400000000000000000 (1 000-й)Thread *, long) + 168 5
libjvm.dylib 0x000000010843b2d2 Monitor :: wait (bool, long, bool) + 390 6 libjvm.dylib
0x0000000108598b8b GangWorker :: loop () + 179 7 libjvm.dylib
0x00000001084609ea java_start (Тема *) + 246 8
libsystem_pthread.dylib 0x00007fff608712eb _pthread_body + 126 9 libsystem_pthread.dylib 0x00007fff60874249 _pthread_start + 66 10 libsystem_pthread.dylib 0x00007fff6087040d thread_start + 13

резьбы 2: 0 libsystem_kernel.dylib 0x00007fff607b586a __psynch_cvwait + 10 1 libsystem_pthread.dylib 0x00007fff6087456e _pthread_cond_wait + 722 2 libjvm.dylib
0x000000010845c75a os :: PlatformEvent :: park () + 192 3 libjvm.dylib
0x000000010843a776 ParkCommon (ParkEvent *, long) + 42 4 libjvm.dylib 0x000000010843b05a Monitor (поток), IWait168 5
libjvm.dylib 0x000000010843b2d2 Monitor :: wait (bool, long, bool) + 390 6 libjvm.dylib
0x0000000108598b8b GangWorker :: loop () + 179 7 libjvm.dylib
0x0000 (0x0000). *

package com.efe.fqa;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class JsonView extends JSplitPane {

    private static final long serialVersionUID = 0xEFECAFE2BL;
    private JSONObject job;
    private String rootName;

    public JsonView (String title, String jsonAsString) throws JSONException {
        this (title, new JSONObject(jsonAsString));
    }

    public JsonView (String rootNodeName, JSONObject job)  throws JSONException {
        super (HORIZONTAL_SPLIT);
        rootName = rootNodeName;
        this.job = job;
//  }
//  
//  public void createGUI () throws JSONException {
        add (getTextPane (job), LEFT);
        add (getTreePane (rootName, job), RIGHT);
    }

    private JScrollPane getTextPane (JSONObject job) throws JSONException {
        JTextArea ta = new JTextArea(job.toString(4));
        JScrollPane sp = new JScrollPane (ta);
        sp.setPreferredSize(new Dimension(720,400));
        return sp;
    }

    private JScrollPane getTreePane (String title, JSONObject job) throws JSONException {
        int n = job.length();
        DefaultMutableTreeNode jsonRoot=new DefaultMutableTreeNode(title + " (" + n + ")");
        expandUnitTree (jsonRoot, job);
        JTree jsonTree = new JTree(jsonRoot);
        JScrollPane sp = new JScrollPane (jsonTree);
        sp.setPreferredSize(new Dimension(720,400));
        return sp;
    }

    private void expandArrayTree (DefaultMutableTreeNode parent, JSONArray jarray) throws JSONException {
        int n = jarray.length();
        for (int i = 0 ; i < n ; i++) {
            DefaultMutableTreeNode jsonNode = new DefaultMutableTreeNode("[" + i + "]");
            Object child = jarray.get(i);
            System.out.println ("Child class: " + child.getClass().getName());
            if (child instanceof JSONArray) {
                expandArrayTree(jsonNode, jarray.getJSONArray(i));
            } else if (child instanceof JSONObject) {
                expandUnitTree(jsonNode, jarray.getJSONObject(i));
            } else if (child instanceof String) {
                jsonNode.add (new DefaultMutableTreeNode ("\"" + child + "\""));
            } else {
                jsonNode.add (new DefaultMutableTreeNode (child.toString()));
            }
            parent.add(jsonNode);
        }
    }

    private void expandUnitTree (DefaultMutableTreeNode parent, JSONObject job) throws JSONException {
        //JSONArray names = job.names();
        //System.out.println ("[expandUnitTree] names has " + names.length() + " elements");
        //for (int i = 0 ; i < names.length() ; i++)
        System.out.println (job);
        Iterator<?> keys = job.keys();
        List<String> jobKeys = new ArrayList<String>();
        while (keys.hasNext()) {
            jobKeys.add(keys.next().toString());
            //System.out.println (keys.next());
        }
        Collections.sort(jobKeys);
        for (String jsonKey : jobKeys) {
            Object child = job.get(jsonKey);
            Class<?> cls = child.getClass();
            System.out.println ("\t" + jsonKey + " -> " + cls.getName());
            DefaultMutableTreeNode jsonNode = null;
            if (job.isNull(jsonKey)) {
                jsonNode = new DefaultMutableTreeNode("\"" + jsonKey + "\" : null");
            } else if (child instanceof JSONArray) {
                JSONArray jsonChild = job.getJSONArray(jsonKey);
                int n = jsonChild.length();
                jsonNode = new DefaultMutableTreeNode("\"" + jsonKey + "\" [" + n + "]");
                expandArrayTree (jsonNode, jsonChild);
            } else if (child instanceof JSONObject) {
                JSONObject jsonChild = job.getJSONObject(jsonKey);
                int n = jsonChild.length();
                jsonNode = new DefaultMutableTreeNode("\"" + jsonKey + "\" (" + n + ")");
                expandUnitTree (jsonNode, jsonChild);
            } else if (child instanceof Boolean) {
                boolean bool = job.getBoolean(jsonKey);
                jsonNode = new DefaultMutableTreeNode("\"" + jsonKey + "\" : " + bool);
            } else if (child instanceof Integer) {
                int iNumber = job.getInt(jsonKey);
                jsonNode = new DefaultMutableTreeNode("\"" + jsonKey + "\" : " + iNumber); 
            } else if (child instanceof Double) {
                double dNumber = job.getDouble(jsonKey);
                jsonNode = new DefaultMutableTreeNode("\"" + jsonKey + "\" : " + dNumber);
            } else {
                String str = job.getString(jsonKey);
                jsonNode = new DefaultMutableTreeNode("\"" + jsonKey + "\" : \"" + str + "\"");
            }
            parent.add(jsonNode);
        }
    }

    public static JSONObject readJsonFile (File file) throws IOException, JSONException {
        StringBuilder sb = new StringBuilder();
        BufferedReader br = new BufferedReader (new FileReader (file));
        for (String s = br.readLine() ; s != null ; s = br.readLine())
            sb.append(s);
        br.close();
        return new JSONObject(sb.toString());
    }

    public static void main(String[] args) {
        JFileChooser fc = new JFileChooser(System.getProperty("user.home"));
        if (fc.showOpenDialog(new JFrame()) == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();
            try {
                JSONObject job = readJsonFile (file);
                String fileName = file.getName();
                JFrame fr = new JFrame ("JsonView: " + file.getAbsolutePath());
                JsonView jv = new JsonView ("[JsonView] File: " + fileName, job);
                fr.getContentPane().add(jv);
                fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
//                      try {
//                          jv.createGUI();
                            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
                            int height = screenSize.height;
                            int width = screenSize.width;
                            fr.pack();
                            Dimension pfSize = fr.getSize();
                            fr.setLocation((width - pfSize.width)/2, (height - pfSize.height)/2 - 200);
                            fr.setVisible(true);
//                      } catch (JSONException jex) {
//                          jex.printStackTrace();
//                      }
                    }
                });

            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...