JUNG VisualizationImageServer 初始化时出现 ArrayStoreException

ArrayStoreException on JUNG VisualizationImageServer initialization

我正在尝试获得一个基本的 JUNG 图示例 运行ning - 我能够在独立的 java 程序中获得以下代码 运行 但是当我把使用 Maven 构建的服务器端 jar 中的相同代码,它在 VisualizationImageServer 初始化时失败并出现 ArrayStoreException:

public Response getGraph() throws IOException {
    //log.info("Starting graph rendering");
    try {
        DirectedSparseGraph<String, Number> g = new DirectedSparseGraph();
        String[] v = createVertices(10); 
        createEdges(v); 
        vv =  new VisualizationImageServer<String,Number>(new KKLayout<String,Number>(graph), new Dimension(600,600)); 
        renderGraph(vv);
        ...}

此行失败:

        vv =  new VisualizationImageServer<String,Number>(new KKLayout<String,Number>(graph), new Dimension(600,600)); 

错误消息片段:

java.lang.ArrayStoreException: edu.uci.ics.jung.algorithms.layout.KKLayout
    at edu.uci.ics.jung.visualization.layout.ObservableCachingLayout.<init>(ObservableCachingLayout.java:50)
    at edu.uci.ics.jung.visualization.DefaultVisualizationModel.setGraphLayout(DefaultVisualizationModel.java:91)
    at edu.uci.ics.jung.visualization.DefaultVisualizationModel.<init>(DefaultVisualizationModel.java:74)
    at edu.uci.ics.jung.visualization.BasicVisualizationServer.<init>(BasicVisualizationServer.java:150)
    at edu.uci.ics.jung.visualization.VisualizationImageServer.<init>(VisualizationImageServer.java:40)

我最好的猜测是,在您的服务器端代码中,您有多个相互冲突的 jung 版本。 在 jung-visualization 2.0 版 ObservableCachingLayout 的第 50 行,委托 (KKLayout) 被添加到 org.apache.commons.collections15.Transformer[] 数组,因为 KKLayout 委托是(应该是)Transformer 的一个实例。 你的数组存储异常调用 KKLayout 作为问题让我认为 ObservableCachingLayout 的早期版本 2.0 正在获得 2.1 或更高版本的 KKLayout 委托(来自 jung-algorithms ) 不是 Transformer,而是 com.google.common.base.Function。 我无法验证这是否是实际问题,但我相信这个理论解决了您所看到的特定错误的可能原因。