草庐IT

classloader

全部标签

java - this.getClass().getResource ("").getPath() 返回不正确的路径

我目前正在为我的计算机科学期末制作一个简单的Java小程序,它需要获取当前正在运行的类(class)的路径。类文件位于C:\2013\game\文件夹中。为了获得这条路径,我在我的主类构造函数中调用了这段代码:publicgame(){StringtestPath=this.getClass().getResource("").getPath();//Restofgame}但是,尽管正确的输出是“C:/2013/game”,但此命令反而返回此字符串:“/”此外,我尝试使用以下代码来纠正此问题:publicgame(){StringtestPath=this.getClass().get

java - 如何从 Java 获取 jar 文件的主类名称?

我想使用URLClassLoader加载和执行外部jar文件。从中获取“Main-Class”的最简单方法是什么? 最佳答案 我知道这是一个老问题,但至少对于JDK1.7,之前提出的解决方案似乎不起作用。出于这个原因,我发布了我的:JarFilej=newJarFile(newFile("jarfile.jar"));StringmainClassName=j.getManifest().getMainAttributes().getValue("Main-Class");其他解决方案对我不起作用的原因是因为j.getManifes

java - 有和没有 getClassLoader 的 getResourceAsStream 有什么区别?

我想知道以下两者之间的区别:MyClass.class.getClassLoader().getResourceAsStream("path/to/my/properties");和MyClass.class.getResourceAsStream("path/to/my/properties");谢谢。 最佳答案 来自Class.getResourceAsStream()的Javadoc:Thismethoddelegatestothisobject'sclassloader.Beforedelegation,anabsolute

java - 更改类加载器

我正在尝试在运行时切换类加载器:publicclassTest{publicstaticvoidmain(String[]args)throwsException{finalInjectingClassLoaderclassLoader=newInjectingClassLoader();Thread.currentThread().setContextClassLoader(classLoader);Threadthread=newThread("test"){publicvoidrun(){System.out.println("running...");//approach1Cl

java - 如何检查一个类是否被初始化?

您可能会问,我为什么要这样做-这是因为我正在使用一个类(来自外部库),该类在其静态初始化程序中执行某些操作,我需要知道它是否已完成。我查看了ClassLoader,但没有找到任何有用的东西。有什么想法吗? 最佳答案 您可以使用ClassLoader.findLoadedClass()方法。如果它返回null,则不会加载该类。这样您就不会加载尚未加载的类。WARNING:这段代码在这里不起作用,在系统类加载器中,findLoadedClass()是protected,您需要用自己的类加载器覆盖它。检查下面的链接Onthesametop

java - 从 sbt 程序集运行 uber jar 会导致错误 : Could not find or load main class

我有一个使用sbtassembly插件打包为uber-jar的spark作业。build.sbt指定一个可运行的main作为生成的uber-jar的目标mainClassinassembly:=Some("com.foo.Bar")正确创建程序集后,运行预期的命令:java-jarassembly.jar结果Error:Couldnotfindorloadmainclasscom.foo.Bar使用另一种方法,如java-cpassembly.jarcom.foo.Bar会给出相同的错误消息。然后,我将uber-jar的内容提取到一个新目录中。我可以看到我的com/foo/目录和Bar

java - 正确使用 Classloader(尤其是在 Android 中)

我阅读了一些关于类加载器的文档,但我仍然不确定在哪里以及为什么需要它们。AndroidAPI说:Loadsclassesandresourcesfromarepository.Oneormoreclassloadersareinstalledatruntime.Theseareconsultedwhenevertheruntimesystemneedsaspecificclassthatisnotyetavailablein-memory.所以如果我理解正确的话,可以有很多负责加载新类的类加载器。但是系统如何决定使用哪个呢?在什么情况下开发人员应该实例化一个新的类加载器?在Androi

java - 使用 ClassLoader 加载文件

这个问题困扰了我一段时间。我必须在我的Java应用程序中加载几个文件,到目前为止我唯一的工作方式如下所示:URLhsURL;if(System.getProperty("os.name").toLowerCase().contains("windows")){hsURL=newURL("file:/"+System.getProperty("user.dir")+"/helpsets/helpset.hs");}else{hsURL=newURL("file://"+System.getProperty("user.dir")+"/helpsets/helpset.hs");}但这又丑

java - 修补或覆盖核心 Java 10 类的实现

JFX中有一个错误,通常在计算屏幕坐标时出现https://bugs.openjdk.java.net/browse/JDK-8194727和https://bugs.openjdk.java.net/browse/JDK-8190400我已将问题追溯到GeneralTransform3D的实现,它是javajfx运行时的一部分。我已向Oracle提交错误报告,但在它被接受、修复并发布之前,我需要一种方法来修复我的应用程序。在java8中,我能够创建一个包含该类的固定版本的jar,并将其安装在lib/ext文件夹中。这似乎有效,JFX实现使用了我的实现而不是它自己的实现。在java10

Java ClassLoader委托(delegate)模型?

在ClassLoader上调用loadClass()时,ClassLoader是先检查类是否已加载,还是立即将此检查委托(delegate)给其父级ClassLoader?JavaAPI说:Whenrequestedtofindaclassorresource,aClassLoaderinstancewilldelegatethesearchfortheclassorresourcetoitsparentclassloaderbeforeattemptingtofindtheclassorresourceitself.但是JavaReflectioninAction一书中有一个关于类加