我正在使用graphstream使用org.graphstream.graph库绘制图形(使用lat-lon)。
import org.graphstream.graph.*;
以下是显示图表的代码。
public static void displayGraph(){
System.setProperty("gs.ui.renderer","org.graphstream.ui.j2dviewer.J2DGraphRenderer");
Graph graph = new MultiGraph("Test");
try{
graph.read("data/fullGraph2sc.dgs");
}
catch (Exception e){
e.printStackTrace();
}
graph.addAttribute("ui.stylesheet",styleSheet);
graph.addAttribute("ui.quality");
graph.addAttribute("ui.antialias");
graph.display(false);
}
包含必要的ui文件。我也在pom.xml中:
<!-- https://mvnrepository.com/artifact/org.graphstream/gs-core -->
<dependency>
<groupId>org.graphstream</groupId>
<artifactId>gs-core</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.graphstream/gs-algo -->
<dependency>
<groupId>org.graphstream</groupId>
<artifactId>gs-algo</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.graphstream/gs-ui -->
<dependency>
<groupId>org.graphstream</groupId>
<artifactId>gs-ui</artifactId>
<version>1.3</version>
</dependency>
问题是当我在Intellij中运行此代码时,它没有任何问题。但是,当我尝试使用命令行运行时,它会给出以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/graphstream/graph/Graph
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
at java.lang.Class.getMethod0(Class.java:2774)
at java.lang.Class.getMethod(Class.java:1663)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.graphstream.graph.Graph
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 6 more
现在我有两个问题要问: 1)如何使用命令行执行错误显示已满(由于...更多,我无法调试;它没有说明问题的确切位置。) 2)为什么我只在命令行执行期间得到上述错误?
答案 0 :(得分:0)
1)首先,找到您的.m2
目录。当maven获取pom中指定的依赖项时,它会将它们放在.m2
(或类似的主目录,如果您在Windows上)中的/Users/username
文件夹中。这就是图形流类所在的位置。有关.m2
文件夹的更多参考,请查看this Mykong post。要解决NoClassDefFoundError
,请在类路径中包含以下jar:
/{.M2_LOCATION}/.m2/repository/org/graphstream/gs-core/1.3/gs-core-1.3.jar
/{.M2_LOCATION}/.m2/repository/org/graphstream/pherd/1.0/pherd-1.0.jar
/{.M2_LOCATION}/.m2/repository/org/graphstream/mbox2/1.0/mbox2-1.0.jar
2)它在IntelliJ中正常工作的原因是IntelliJ会自动在类路径中包含这些jar(通常还有很多其他的)。要查看IntelliJ在幕后所做的事情,请查看当您点击“run”时打开的对话框窗格中的第一行文本 - 这是IntelliJ正在使用的命令行。