2013-08-29 2 views
1

В настоящее время я работаю над программным обеспечением, позволяющим создавать гейм-книги, и я пытаюсь добавить графическое представление. Я создаю граф, где вершины - это абзацы, а края - между ними.JGraph/JGraphX: Создание очень сложного графика

В созданном мной учебнике имеется более 100 параграфов, и все они чрезвычайно переплетаются. Сначала я попытался использовать JGraphX, но результатом стал маш после применения макета. Поскольку помощь и примеры для JGraphX ​​разрежены, я не мог ее решить, поэтому я попробовал удачу с JGraph 5.13, потому что у него был фасад (не удалось найти эквивалент JGraphX).

Моя проблема заключается в том, что фасад работает очень хорошо для первых 87 ребер, которые я добавляю к нему. Когда я добавляю еще одно, я получаю это исключение:

Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract! 

at java.util.ComparableTimSort.mergeHi(Unknown Source) 
at java.util.ComparableTimSort.mergeAt(Unknown Source) 
at java.util.ComparableTimSort.mergeForceCollapse(Unknown Source) 
at java.util.ComparableTimSort.sort(Unknown Source) 
at java.util.ComparableTimSort.sort(Unknown Source) 
at java.util.Arrays.sort(Unknown Source) 
at com.jgraph.layout.hierarchical.JGraphMedianHybridCrossingReduction.medianRank(Unknown Source) 
at com.jgraph.layout.hierarchical.JGraphMedianHybridCrossingReduction.weightedMedian(Unknown Source) 
at com.jgraph.layout.hierarchical.JGraphMedianHybridCrossingReduction.run(Unknown Source) 
at com.jgraph.layout.hierarchical.JGraphHierarchicalLayout.run(Unknown Source) 

Я не уверен, что делать дальше. Является ли JGraph 5.13 не для создания такого хаотического графика? Есть ли какой-то эквивалент фасада JGraphX, который я мог бы использовать? Я что-то упускаю?

+0

Вы можете вставить код, где вы делаете сравнение –

+0

Эта ошибка указывает на неправильную реализацию 'Comparator', вы ее написали? Если да, то, пожалуйста, покажите это. – Katona

+0

Я сам не делал сравнения, исключение происходит, когда я делаю этот код (и на графике имеет 88 или более ребер): 'hir.run (graphFacade); Map inested = graphFacade.createNestedMap (true, true); graph.getGraphLayoutCache(). Edit (вложенные); ' – user2730789

ответ

3

В 1 или 2 этапах иерархического макета, который работал с Java 6, существует comparator, но Java 7 started enforcing that they must be must be transitive. Мы рассмотрим вопрос о его исправлении.

+0

Хорошо спасибо ... Я постараюсь сделать это с помощью органического макета, пока это довольно уродливо, но по крайней мере, это не исключение. – user2730789

+0

Исправление очень простое, я могу нажать его в github в понедельник, вы можете построить его прямо оттуда. – David

+0

Ничего себе, это реакционная способность! Я думал, что ты имеешь в виду нечто вроде «возможно когда-нибудь»: D Спасибо, Дэвид! – user2730789

Смежные вопросы