GVKun编程网logo

getClassLoader().getResourceAsStream(resource) 在 java 11 中返回 null(getclass返回值)

2

对于想了解getClassLoader().getResourceAsStream(resource)在java11中返回null的读者,本文将是一篇不可错过的文章,我们将详细介绍getclass返回

对于想了解getClassLoader().getResourceAsStream(resource) 在 java 11 中返回 null的读者,本文将是一篇不可错过的文章,我们将详细介绍getclass返回值,并且为您提供关于ApplicationContext 在使用 SpringRunner.class 运行的 SpringBootTest 中返回 null、Class.class.getResourceAsStream 在 eclipse 中返回 null 但在 jar 中工作、ClassLoader.getSystemClassLoader().getResourceAsStream() 在 Servlet 中返回 null?、context.getClass().getClassLoader().getResourceAsStream("test.xml")的有价值信息。

本文目录一览:

getClassLoader().getResourceAsStream(resource) 在 java 11 中返回 null(getclass返回值)

getClassLoader().getResourceAsStream(resource) 在 java 11 中返回 null(getclass返回值)

如何解决getClassLoader().getResourceAsStream(resource) 在 java 11 中返回 null

我正在将 spring boot java 项目从 openshift-jdk-8 迁移到 openshift-jdk-11。在 openshift 云环境中将项目部署为 docker 映像时,在下面的 java-11 行中始终返回 null。相同的代码在 Windows/本地环境中运行时运行良好。

getClassLoader().getResourceAsstream("mapper/myfile.xml")

从 bean-io 依赖加载文件

implementation("org.beanio:beanio:2.1.0")

我在这个 jar 中的以下位置有文件。

BOOT-INF
 --classes
    --mapper/myfile.xml

低于错误

   2021-03-10T10:39:27.555-05:00,severity=ERROR,thread=ForkJoinPool-10-worker-3,org.beanio.BeanIOConfigurationException: BeanIO mapping file ''mapper/myfile.xml'' not found on classpath
    at org.beanio.StreamFactory.loadResource(StreamFactory.java:213) ~[beanio-2.1.0.jar!/:2.1.0]
    at org.beanio.StreamFactory.loadResource(StreamFactory.java:198) ~[beanio-2.1.0.jar!/:2.1.0]
    at com.payment.ene.xerox.domain.sortIndexHandler.<init>(SortIndexHandler.java:51) ~[gen-copy-dmz.120.jar!/:?]
    at com.payment.ene.xerox.domain.exstream.PrintFloworchestratorImpl.lambda$printPrep$0(copyFloworchestratorImpl.java:100) ~[gen-copy-dmz.120.jar!/:?]
    at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1448) [?:?]
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) [?:?]
    at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) [?:?]
    at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) [?:?]
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) [?:?]
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183) [?:?]

解决此问题的任何建议

解决方法

你可以试试java.nio:

new String(Files.readAllBytes(Paths.get(absoluteFilePath)));

ApplicationContext 在使用 SpringRunner.class 运行的 SpringBootTest 中返回 null

ApplicationContext 在使用 SpringRunner.class 运行的 SpringBootTest 中返回 null

如何解决ApplicationContext 在使用 SpringRunner.class 运行的 SpringBootTest 中返回 null

我在运行测试类时遇到问题。在我运行它后,它返回“org.springframework.beans.factory.NoUniqueBeanDeFinitionException: No qualifying bean of type ''t.c.i.s.se.Sfts'' available: expected single matching bean but found 2: sftsImpl,sfts”这个异常。

这是我的测试课;

  1. @RunWith(springrunner.class)
  2. @SpringBoottest(classes = Sfta.class)
  3. public class SftaTests {
  4. @Autowired
  5. ApplicationContext ac;
  6. @Test
  7. public void contextLoads() {
  8. Sfts sfts= ac.getBean(Sfts.class);
  9. assertTrue(Sfts instanceof SftsImpl);
  10. }
  11. }

我的其他课程就像;

  1. public interface Sfts {
  2. public void process();
  3. }
  4. @Service
  5. @Component
  6. public class SftsImpl implements Sfts {
  7. @Autowired
  8. private GlobalConfig globalConfig;
  9. @Autowired
  10. private Ftr ftr;
  11. private Fc fc;
  12. @Async
  13. @Scheduled(initialDelayString = "${s.f.t.m}",fixedrateString = "${s.f.t.m}")
  14. public void process() {
  15. int hod = DateTime.Now().getHourOfDay();
  16. if (hod != 6){
  17. fc = new Fc(globalConfig,ftr);
  18. fc.control();
  19. }
  20. }
  21. }

为什么我在运行测试应用程序后出现错误?

解决方法

尝试从 SftsImpl bean 中删除 @Component 注释。 @Service 足以注册一个 bean。

此外,如果您只想测试您的 bean - 从 ApplicationContext 获取它可能不是最佳选择。 不使用 ApplicationContext 的单元测试代码示例:

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest(classes = Sfta.class)
  3. public class SftaTests {
  4. @Autowired
  5. Sfts sfts;
  6. @Test
  7. public void testAsync() {
  8. sfts.process();
  9. // do assertions here
  10. }
  11. }

Class.class.getResourceAsStream 在 eclipse 中返回 null 但在 jar 中工作

Class.class.getResourceAsStream 在 eclipse 中返回 null 但在 jar 中工作

如何解决Class.class.getResourceAsStream 在 eclipse 中返回 null 但在 jar 中工作

我正在开发一款 Java 游戏。我在另一台计算机上的 eclipse 中开始了我的项目,现在我将它从旧计算机上的 eclipse 导出,将其复制到我新计算机上的 eclipse 工作区,将其导入到 eclipse 中,还验证了我的所有属性都是两台计算机上的相同构建路径 java 版本 (SE 1.8) 等。现在我所有的 Class.class.getResourceAsstream 调用都返回 null。即使它在我的旧电脑上运行良好。

更具体地说,我有这个代码

  1. InputStream in=Class.class.getResourceAsstream(file);
  2. BufferedReader reader=new BufferedReader(new InputStreamReader(in));

Where file="guis/guiVertexShader.txt"

所以我的问题是第 1 行在 eclipse 中返回 null,但是,如果我导出我的项目并将其放入一个 Fat jar 中,那么 LWJGL 2 的所有 jars/natives 都可以正常工作。同样在 eclipse 中,下面的工作

  1. InputStream in=new FileInputStream(System.getProperty("user.dir")+"/src"+file);

虽然我知道我需要使用 getResourceAsstream 以便我可以导出到 jar。 有什么想法吗?

解决方法

我似乎已经修复了它,问题是我的新计算机上没有安装与 Java 1.8 兼容的 jre。一旦我安装了它(Java 8)并添加了 JRE 到 eclipse 它在 eclipse 和 Fat jar 中都运行良好

ClassLoader.getSystemClassLoader().getResourceAsStream() 在 Servlet 中返回 null?

ClassLoader.getSystemClassLoader().getResourceAsStream() 在 Servlet 中返回 null?

如何解决ClassLoader.getSystemClassLoader().getResourceAsStream() 在 Servlet 中返回 null?

我的问题可能很模糊。让我详细说明一下。 我的项目目录结构(在 IntelliJ IDEA 中):

  1. Server/--------------------------Module
  2. src/
  3. java/-----------------------------------classpath directory
  4. com.example.demo/
  5. HelloServlet.java ------a servlet respons
  6. TestCode.java ------a servlet that responds to network requests
  7. Utils.java ------a class to test by junit
  8. resources/------------------------------classpath directory
  9. hello.txt------------------------------------------ "hello word" writed in this file

Utils.java 中,我有以下代码:

  1. public class Utils {
  2. private static BufferedReader reader = null;
  3. static{
  4. try {
  5. InputStream is = ClassLoader.getSystemClassLoader().getResourceAsstream("hello.txt");
  6. reader = new BufferedReader(new InputStreamReader(is));
  7. } catch (Exception e) {
  8. e.printstacktrace();
  9. }
  10. }
  11. public static String getString() throws IOException {
  12. return reader.readLine();
  13. }
  14. }

TestCode.java中:

  1. public class TestCode {
  2. @Test
  3. public void test() throws IOException {
  4. System.out.println(Utils.getString());
  5. }
  6. }

当我运行方法 test() 时,我得到以下控制台输出:

  1. Hello World

这样就可以了,但是servlet出了点问题。 在 HelloServlet.java 中,我有以下代码:

  1. @WebServlet(name = "helloServlet",value = "/hello-servlet")
  2. public class HelloServlet extends HttpServlet {
  3. private String message;
  4. public void init() {
  5. message = "init() has invoked.";
  6. }
  7. public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {
  8. response.setContentType("text/html");
  9. //NullPointerException throws
  10. message = Utils.getString();
  11. PrintWriter out = response.getWriter();
  12. out.println("<html><body>");
  13. out.println("<h1>" + message + "</h1>");
  14. out.println("</body></html>");
  15. }
  16. public void destroy() {
  17. }
  18. }

当我在 doGet() 方法中调用 Utils.getString() 并通过 chrome 发送 GET 请求时,servlet 将抛出 NullPointerException。

  1. java.lang.NullPointerException
  2. at java.io.Reader.<init>(Reader.java:78)
  3. at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
  4. at com.example.demo.Utils.<clinit>(Utils.java:17)
  5. at com.example.demo.HelloServlet.doGet(HelloServlet.java:20)
  6. at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
  7. at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)

但是,当我对 Utils.java 进行如下更改时:

  1. private static BufferedReader reader = null;
  2. static{
  3. try {
  4. //use getClassLoader() instead of getSystemClassLoader()
  5. InputStream is = Utils.class.getClassLoader().getResourceAsstream("hello.txt");
  6. reader = new BufferedReader(new InputStreamReader(is));
  7. } catch (Exception e) {
  8. e.printstacktrace();
  9. }
  10. }
  11. public static String getString() throws IOException {
  12. return reader.readLine();
  13. }

然后我通过 chrome 发送一个 GET 请求。“Hello World”将打印在浏览器上。 当我刷新网站(或再次请求 servlet)时,会出现 null 打印的第二个问题。 为什么?有人可以回答我的问题吗?谢谢

解决方法

Apache Tomcat 8 使用多个类加载器:https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html。

如果您想让代码实现独立,请使用以下代码段:

classLoader = request.getSession().getServletContext().getClassLoader()

根据 JavaEE 文档,您将获得一种可靠的方法来获取“由此 ServletContext 表示的 Web 应用程序的类加载器”。

context.getClass().getClassLoader().getResourceAsStream(

context.getClass().getClassLoader().getResourceAsStream("test.xml")

context.getClass().getClassLoader().getResourceAsStream ("test.xml") 这个方法获取工程目录下的 test.xml 文件的内容,返回的 InputStream 为空,有可以解决的吗?

关于getClassLoader().getResourceAsStream(resource) 在 java 11 中返回 nullgetclass返回值的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ApplicationContext 在使用 SpringRunner.class 运行的 SpringBootTest 中返回 null、Class.class.getResourceAsStream 在 eclipse 中返回 null 但在 jar 中工作、ClassLoader.getSystemClassLoader().getResourceAsStream() 在 Servlet 中返回 null?、context.getClass().getClassLoader().getResourceAsStream("test.xml")等相关知识的信息别忘了在本站进行查找喔。

本文标签: