Repast: неизвестные сообщения об ошибках - PullRequest
1 голос
/ 24 октября 2019

Проблема 1:

Ниже приведена ошибка, которую я получил, но я не знаю, где это не так.

Caused by: java.lang.NullPointerException
    at repast.simphony.visualizationOGL2D.DisplayOGL2D.getSpatialForObject(DisplayOGL2D.java:535)
    at repast.simphony.visualizationOGL2D.NetworkLayerOGL2D.update(NetworkLayerOGL2D.java:103)
    at repast.simphony.visualizationOGL2D.DisplayOGL2D.update(DisplayOGL2D.java:410)
    at repast.simphony.visualizationOGL2D.DisplayOGL2D.reshape(DisplayOGL2D.java:589)
    at saf.v3d.Canvas2D.reshape(Canvas2D.java:400)
    at jogamp.opengl.GLDrawableHelper.reshape(GLDrawableHelper.java:742)
    at jogamp.opengl.GLDrawableHelper.reshape(GLDrawableHelper.java:748)
    at javax.media.opengl.awt.GLJPanel$Updater.display(GLJPanel.java:1404)
    at javax.media.opengl.awt.GLJPanel$9.run(GLJPanel.java:1483)
    at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1277)
    ... 69 more

Это входной файл, используемый для создания пограничной сети:

enter image description here

ниже - это часть кодов, добавляющих маршрутную сеть, о которой сообщалось выше. Я пытаюсь нанести на карту сеть неориентированного маршрута, чтобы гарантировать, что есть только один край, соединяющий два концентратора. Чтобы избежать дублирования, у меня есть условие if (if (net.getEdge (source, target) == null)), чтобы проверить, существует ли уже край между двумя концентраторами. если нет, создайте новый, если да, ничего не делайте. Если я уберу это условие if, ошибок не будет, но есть дублирование ребер. Если я добавлю такое условие if, я буду получать ошибки ниже каждый раз. Я не знаю почему? Но если я полностью удаляю дисплей в графическом интерфейсе, он прекрасно работает, чтобы исключить дублирование.

//      add route network
        Network<Object> net = (Network<Object>)context.getProjection("IntraCity Network");
        IndexedIterable<Object> local_hubs = context.getObjects(LocalHub.class);
        for (int i = 0; i <= CSV_reader_route.getMaster().size() - 1; i++) {
            String source = (String) CSV_reader_route.getMaster().get(i).get(0);
            String target = (String) CSV_reader_route.getMaster().get(i).get(3);
            double dist = Double.parseDouble((String) CSV_reader_route.getMaster().get(i).get(6));
            double time = Double.parseDouble((String) CSV_reader_route.getMaster().get(i).get(7));

            Object source_hub = null;
            Object target_hub = null;
            Query<Object> source_query = new PropertyEquals<Object>(context, "hub_code", source);
            for (Object o : source_query.query()) {
                if (o instanceof LocalHub) {
                    source_hub = (LocalHub) o;
                }
                if (o instanceof GatewayHub) {
                    source_hub = (GatewayHub) o;
                }
            }

            Query<Object> target_query = new PropertyEquals<Object>(context, "hub_code", target);
            for (Object o : target_query.query()) {
                if (o instanceof LocalHub) {
                    target_hub = (LocalHub) o;
                }
                if (o instanceof GatewayHub) {
                    target_hub = (GatewayHub) o;
                }
            }

//          System.out.println(target_hub.getClass() + " " + time);
//          Route this_route = (Route) net.addEdge(source_hub, target_hub);
//          context.add(this_route);
//          System.out.println(net.getEdge(source_hub, target_hub));
            if (net.getEdge(source_hub, target_hub) == null) {
                Route this_route = (Route) net.addEdge(source_hub, target_hub);
                context.add(this_route);
//              this_route.setDist(dist);
//              this_route.setTime(time); }
            }



        }

Проблема найдена для проблемы 1:

Я обнаружил, почему проблема возникает, этодолжны быть source_hub и target_hub в net.getEdge (источник, цель).

        if (net.getEdge(source, target) == null) {
            Route this_route = (Route) net.addEdge(source, target);

Проблема 2:

ОБНОВЛЕНИЕ: Я обнаружил, что инициализация этой части очень медленнаякод. Это займет 40 секунд, чтобы закончить! где проблема кодов? Я проверил и обнаружил, что мой код для чтения CSV может фактически завершить чтение менее чем за 1 секунду, если я запускаю его отдельно. Этот DataReader является частью, используемой вышеупомянутым процессом для инициализации соответствующих свойств.

Ниже приведены коды DataReader, используемые вышеупомянутым процессом генерации маршрута. Тем не менее, я подозреваю, что это цикл запросов в приведенных выше кодах генерации маршрутов, который занимает большую часть времени для инициализации:

public class DataReader {

    private String csvFile;
    private List<String> sub = new ArrayList<String>();
    private List<List> master = new ArrayList<List>();


    public void ReadFromCSV(String csvFile) {

        String line = "";
        String cvsSplitBy = ",";

        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
            System.out.println("Header " + br.readLine());
            while ((line = br.readLine()) != null) {

                // use comma as separator
                String[] list = line.split(cvsSplitBy);
//                System.out.println("the size is " + country[1]);
                for (int i = 0; i < list.length; i++) {
                    sub.add(list[i]);
                }
                List<String> temp = (List<String>) ((ArrayList<String>) sub).clone();
//                master.add(new ArrayList<String>(sub));
                master.add(temp);
                sub.removeAll(sub);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(master);
    }

    public List<List> getMaster() {
        return master;
    }

}

1 Ответ

3 голосов
/ 24 октября 2019

Вы можете получить эту ошибку, если вы не указали стиль для этого типа агента. Например, если вы ввели новый тип агента в модель и создали экземпляры агентов этого типа, но не указали стиль для этого типа в мастере отображения.

...