当前位置: 首页 > 知识库问答 >
问题:

就餐:报告了未知错误

梁渊
2023-03-14

问题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

这是用于生成边缘网络的输入文件:

下面是添加报告上述问题的路由网络的代码部分。我试图绘制一个无方向的路线网络,以确保只有一条边连接两个枢纽。为了避免重复,我使用了一个if条件(if(net.getEdge(source,target)==null))来检查两个集线器之间是否已经存在一条边。如果没有,创建一个新的,如果是,什么也不做。如果我删除这个If条件,就不会有错误,但会有边缘复制。如果我加上这样的If条件,我每次都会得到下面的错误。我不知道为什么?但是,如果我完全删除GUI中的显示,那么省略所有重复就可以了。

//      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的问题:

我发现问题发生的原因,它应该在net.getEdge(源,目标)中source_hub和target_hub。

        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个答案

幸经艺
2023-03-14

如果您没有为该代理类型指定样式,您可能会收到此错误。例如,如果您向模型引入了新的代理类型并实例化了该类型的代理,但没有在显示向导中为该类型指定样式。

 类似资料:
  • 我有一个相当简单的映射器 我的域类: 我的DTO类: 我在mvn干净安装上收到的错误: [错误]/C:/code报告/work/github/symphony票证/src/main/java/com/ticket/mappers/TicketLocationDetailsMapper。java:[33,48]结果类型TicketLocationDetails中的未知属性“locationId”。你

  • 错误日志对于发现程序中的错误是非常有帮助的,但是有些时候它也会将应用程序的结构暴露给外部。为了有效的保护你的应用程序不受到由此而引发的问题。你需要将在你的服务器上使用开发和生产(线上)两套不同的配置。 开发环境 为了在开发环境中显示所有可能的错误,将你的 php.ini 进行如下配置: display_errors = On display_startup_errors = On error_re

  • 1.1.2. 错误报告 没有不会犯错的开发者,PHP的错误报告功能将协助您确认和定位这些错误。可以PHP提供的这些详细描述也可能被恶意攻击者看到,这就不妙了。使大众看不到报错信息,这一点很重要。做到这一点很容易,只要关闭display_errors,当然如果您希望得到出错信息,可以打开log_errors选项,并在error_log选项中设置出错日志文件的保存路径。 由于出错报告的级别设定可以导致

  • 我试图找出为什么在<代码>中会发生特定行为。orElseThrow在Java流中。此代码块 导致此错误:

  • 问题内容: 当我运行基本的Docker容器(从Google Cloud Shell中)时,就像这样 然后在运行容器的shell提示符下键入,运行级别为。我是否应该安装()特定软件包以添加对运行级别的支持。如果是这样,哪些是错误的? 问题答案: Docker是一个应用程序隔离工具,而不是OS虚拟化工具。运行级别在操作系统级别,操作系统启动,挂载目录,并启动服务以达到运行级别。在容器中,您的应用程序将

  • 我在一本书中读到,Repast Simphony中的投影可以是投影界面的任何用户实现。我想创建一个自定义投影,但它看起来比我预期的更复杂。你们有没有人尝试过创建自己的投影?如果是的话,你能解释一下如何进行吗?非常感谢。