当前位置: 首页 > 知识库问答 >
问题:

JAVA ClassLoader.class和任何其他显式类调用的getResources(...)工作方式不同?

周意智
2023-03-14

注意:这是一个命名的模块java项目

为什么在java中获取资源是这样工作的?我得到了两个包,在main func中,它们都以jar文件语法打印“/respath/tmp.txt”的URL,并对应于它的类。

这些代码是如何相互区分的?

// mod-one
package com.pkg.one;
import ...
import com.pkg.two.ClassNameTwo;
class ClassNameOne {
    ... main()
        print(ClassNameOne.class.getResource("/resPath/tmp.txt")); // works fine
        print(ClassNameTwo.getCustomRes("resPath/tmp.txt", ClassNameOne.class); // it return null
}

注意:这是一个命名的模块java项目

// mod-two
package com.pkg.two;
import ...
class ClassNameTwo {

    /**
     return "ClassLoader.getSystemResource(...)" if sourceClass is null.
     */
    public static URL getCustomRes(String sourcePath, Class<?> sourceClass) {
        ...
        URL url = null;
        if (sourceClass == null)
            url = ClassLoader.getSystemResource(sourcePath);
        else
            url = sourceClass.getResource("/" + sourcePath);    
        ...
        return url;
        }
}

共有1个答案

楚流觞
2023-03-14

好的,我得到了答案。因为这是一个命名的模块java项目,您需要在访问“resource dir”时向另一个模块授予权限,但为什么它会在不为空时向我发出警告:“包为空或不存在”?

e、 问:

module mod.one { // this module need to access the "res-dir" of mod.two
   requires mod.two;
   ...
}

module mod.two {
   ...
   opens my.path.to.res; // dir: my/path/to/res
}

我们可以访问/修改未打开的第三方模块res-dir吗?

 类似资料:
  • 我被要求实现这个函数,它等待一些操作完成。然后让它做它应该做的事情。我被要求不要使用观察者类。我尝试了无限循环,它成功了。所以我想知道是否还有其他方法可以做到这一点。(我正在Jade中开发一个应用程序,超级代理与其他代理进行通信,一旦代理收到消息,他就可以执行一些功能并发送回消息)。我想为等待的部分做点什么。提前感谢

  • 问题内容: 我是一个初学者,在理解一段代码时遇到了麻烦。有人可以在这个功能启动时给我解释一下,它的作用是什么? 这是我的代码: 问题答案: 让我从一些背景知识开始(您可能已经了解了,但是需要进行解释)。 用于显示项目的长列表(或网格)。假设您要显示100行。一种简单的方法是只创建100个视图,每行一个视图,然后将它们全部布局。但这将是浪费的,因为它们中的大多数将不在屏幕上,因为可以说其中只有10个

  • 这让我快发疯了。我在具有以下结构的文件夹中有一个NetBeans项目: 在src中,我的代码在包中。我想做的是使用 来自包com中的类。我的包,但它只是拒绝工作!“new.png”图像位于resources文件夹中。我是不是遗漏了什么? 经过大量的游戏和移动“new.png”图像,看看它什么时候会找到图像,它终于成功了,但只有当我把图像放在构建文件夹中时。那么我要怎么做才能成功呢? 编辑:对不起,

  • 问题内容: 只是我在考虑编写单例课程的其他方式。那么,该课程被视为单身人士课程吗? 因为静态块只能运行一次。 问题答案: 不它不是。您没有声明 ,也不是。该代码也不会真正编译。 这是单例成语: 应该为,以便其他任何人都不能直接访问它。应该只有一个。应该这样,以便不能重新分配它。您还需要在声明期间 直接 实例化它,这样就不必担心线程那么多。 如果加载成本很高,因此您宁愿延迟加载Singleton,则

  • 当Android在多次模式尝试后被锁定时,它会要求您使用您的谷歌帐户登录以解锁,我有我的用户名和密码,但移动数据和无线未启用,我无法启用,因为它已完全锁定,我不想进行出厂重置,因为我会丢失数据。 作为一名程序员,我浪费了两天的时间来搜索如何,我找到了使用ADB打开wifi的答案: 但是,如果禁用USB调试,它将不起作用,是否有任何其他解决方案可以在使用ADB时启用USB调试或获取wifi或移动数据

  • 问题内容: 我的多线程概念薄弱,正在尝试学习。 在Java中,我所知道的是,我们不能多次调用一个线程: 据我所知,当您再次调用该函数时,它会引发异常,因为一旦线程退出方法,并且您试图再次初始化事物,该线程的关联堆栈就会被破坏。 在那种情况下,我对线程池的了解是,它提供了更好的性能并节省了时间,因为不需要创建新线程(我在此阅读)。 如果不需要在线程池中创建新线程,那么它如何与刚刚完成其run方法的同