Java 为什么这段代码在从Eclipse运行而不是在JAR中运行时会在包中列出类?

Java 为什么这段代码在从Eclipse运行而不是在JAR中运行时会在包中列出类?,java,jar,package,Java,Jar,Package,我问了一个关于如何用Java列出包中所有类的问题。接受的答案确实有效,但当它被编译成.jar文件时就不起作用了。为什么它可以在eclipse中工作,但不能在jar中工作?我怎样才能让它在罐子里工作 代码如下: package com.cospox.elecsim.util; 导入java.io.IOException; 导入java.lang.reflect.Method; 导入java.net.URISyntaxException; 导入java.net.URL; 导入java.nio.fil

我问了一个关于如何用Java列出包中所有类的问题。接受的答案确实有效,但当它被编译成.jar文件时就不起作用了。为什么它可以在eclipse中工作,但不能在jar中工作?我怎样才能让它在罐子里工作

代码如下:

package com.cospox.elecsim.util;
导入java.io.IOException;
导入java.lang.reflect.Method;
导入java.net.URISyntaxException;
导入java.net.URL;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.util.Enumeration;
导入java.util.List;
导入java.util.stream.collector;
导入com.cospox.elecsim.components.Component;
公共最终类OnLoadManager{
public static void doOnLoad()引发异常{
for(类cls:getClasses(Component.Class)){
if(cls!=组件类){
方法onLoad=cls.getDeclaredMethod(“onLoad”);
onLoad.setAccessible(true);
onLoad.invoke(null);
}
}
}
私有静态列表mapPathToClass(路径clsPath,字符串packageName){
字符串className=clsPath.toFile().getName();
className=className.substring(0,className.length()-6);
返回loadClass(packageName+“+”类名称);
}
私有静态路径getPackagePath(类调用者)
抛出IOException,URISyntaxException{
字符串packageName=createPackageName(调用者);
枚举资源=caller.getClassLoader()
.getResources(packageName);
返回路径.get(resources.nextElement().toURI());
}
私有静态字符串createPackageName(类调用方){
返回caller.getPackage().getName().replace(“.”,“/”);
}
私有静态类loadClass(字符串名称){
试一试{
返回Class.forName(name);
}catch(classnotfounde异常){
返回null;
}
}
}
我真的很想远离使用番石榴的图书馆,因为这是谷歌,我真的不想在我的代码中使用谷歌

提前谢谢

编辑-这是全部错误:

java.nio.file.FileSystemNotFoundException
    at com.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:171)
    at com.sun.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:157)
    at java.nio.file.Paths.get(Paths.java:143)
    at com.cospox.elecsim.util.OnLoadManager.getPackagePath(OnLoadManager.java:48)
    at com.cospox.elecsim.util.OnLoadManager.getClasses(OnLoadManager.java:30)
    at com.cospox.elecsim.util.OnLoadManager.doOnLoad(OnLoadManager.java:19)
    at com.cospox.elecsim.Game.doOnLoad(Game.java:154)
    at com.cospox.elecsim.Game.<init>(Game.java:149)
    at com.cospox.elecsim.Main.setup(Main.java:26)
    at processing.core.PApplet.handleDraw(PApplet.java:2425)
    at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:866)
    at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
    at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
    at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
    at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
    at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
    at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
    at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
    at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
    at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
java.nio.file.FileSystemNotFoundException
位于com.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:171)
位于com.sun.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:157)
位于java.nio.file.Paths.get(path.java:143)
位于com.cospox.elecsim.util.OnLoadManager.getPackagePath(OnLoadManager.java:48)
在com.cospox.elecsim.util.OnLoadManager.getClasses(OnLoadManager.java:30)上
位于com.cospox.elecsim.util.OnLoadManager.doOnLoad(OnLoadManager.java:19)
com.cospox.elecsim.Game.doOnLoad(Game.java:154)
在com.cospox.elecsim.Game。(Game.java:149)
位于com.cospox.elecsim.Main.setup(Main.java:26)
位于processing.core.PApplet.handleDraw(PApplet.java:2425)
在processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:866)
位于jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
在jogamp.opengl.GLDrawableHelper.display上(GLDrawableHelper.java:674)
在jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
在jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
位于jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
位于com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
位于com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
位于com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
位于com.jogamp.opengl.util.FPSAnimator$mainstask.run(FPSAnimator.java:178)
位于java.util.TimerThread.mainLoop(Timer.java:555)
在java.util.TimerThread.run(Timer.java:505)

您可以找到所需任何上下文的完整代码。

您提供的链接无效。@DebadattaMishra很抱歉,我忘了替换原型答案中的链接。FixedIs是包含import com.cospox.elecsim.components.Component的jar文件;在类路径中?@DebadattaMishra所有的类都在一个jar中,包括这个、组件和调用这个函数的主类。@DebadattaMishra有关完整代码和错误,请参阅我的编辑