Java 为什么这段代码在从Eclipse运行而不是在JAR中运行时会在包中列出类?
我问了一个关于如何用Java列出包中所有类的问题。接受的答案确实有效,但当它被编译成.jar文件时就不起作用了。为什么它可以在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
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有关完整代码和错误,请参阅我的编辑