gpt4 book ai didi

Java Jar 无法在 Android 中运行

转载 作者:行者123 更新时间:2023-12-01 11:06:31 25 4
gpt4 key购买 nike

我编写了一个小型 Java 应用程序,并将其编译为可执行 jar 文件。该程序使用在 jar 文件内编译的 .txt 文件。为了访问 jar 中的 .txt 文件,您需要使用 ClassLoader.getSystemResourceAsSteam("");

这是 jar 文件中的方法:

 private ArrayList<String> loadChainRestaurantsList() throws IOException {
ArrayList chains = new ArrayList();
InputStream in = ClassLoader.getSystemResourceAsStream("chains.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

String name;
while((name = reader.readLine()) != null) {
chains.add(name);
}

return chains;
}

如果我从 cmd 行将 jar 作为独立的 Java 程序运行,或者从 Eclipse 运行,则此代码可以工作。如果我导出为 jar,然后将其放入另一个 Java 程序并使用它,它甚至可以正常工作,它可以按预期工作。问题是当我将 jar 放入 Android 项目时。我收到此错误:

FATAL EXCEPTION: AsyncTask #1
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: Process: com.jasonjohn.unchainedandroid, PID: 8821
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: java.lang.RuntimeException: An error occured while executing doInBackground()
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at android.os.AsyncTask$3.done(AsyncTask.java)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:242)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: Caused by: java.lang.NullPointerException: lock == null
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.io.Reader.<init>(Reader.java:64)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.io.InputStreamReader.<init>(InputStreamReader.java:120)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.io.InputStreamReader.<init>(InputStreamReader.java:57)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at com.jasonjohn.unchainedapi.UnchainedAPI.loadChainRestaurantsList(UnchainedAPI.java:123)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at com.jasonjohn.unchainedapi.UnchainedAPI.getUnchainedRestaurants(UnchainedAPI.java:71)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at com.jasonjohn.unchainedandroid.MainActivity$UnchainedAsync.doInBackground(MainActivity.java:69)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at com.jasonjohn.unchainedandroid.MainActivity$UnchainedAsync.doInBackground(MainActivity.java:62)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at android.os.AsyncTask$2.call(AsyncTask.java)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java) 
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
10-01 10:40:59.650 8821-8879/? E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818) 

我以前从未见过此错误。谁能解释一下发生了什么事吗?我假设 InputStream/InputStreamReader 为空,但我不知道如何解决这个问题。

最佳答案

你可能应该使用

getResourceAsStream("/chains.txt")

而不是使用

getSystemResourceAsStream(...).

路径前面的/表示在 jar 的根目录中查找。否则,它会在与您从中获取类加载器的类相同的包中查找chains.txt。例如,如果您这样做:

package com.potter.harry;
...
InputStream is = this.getClass().getResourceAsStream("chains.txt");

引用的文件必须放置在“/com/potter/harry/chains.txt”在 zip 文件中。

关于Java Jar 无法在 Android 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32891095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com