Название может быть не совсем понятным, но я попытаюсь объяснить.
Я пытаюсь получить доступ к файлу с путем, подобным /net/blm50+hmm/synlist/
, который прекрасно работает, когда я не экспортирую в файл jar и просто запускаю его изнутри своей среды IDE (eclipse). Однако, если я пытаюсь запустить его после экспорта, я получаю исключение нулевого указателя. Он работает без проблем, если я переименую путь, чтобы в нем не было знака плюс. Могу ли я избежать знака плюс или что-то подобное?
Вы можете спросить, почему я не просто переименую папку, и причина этого в лени. Существует множество папок для переименования, и я бы предпочел избежать этого.
Надеюсь, Вы поможете,
shalmon
EDIT:
У меня есть класс FileUtils, который я использую для доступа к ресурсам в jar приложения:
public class FileUtils {
public static InputStream getInputStreamForResource(String resourcePath) throws IOException {
// Try to get the file from the application jar first.
InputStream result = FileUtils.class.getResourceAsStream(resourcePath);
return result;
}
public static Scanner getScanner(String resourcePath) throws IOException {
return new Scanner(getInputStreamForResource(resourcePath));
}
}
Если я позвоню getScanner("/net/blm50+hmm/synlist/");
, я получу исключение нулевого указателя.
Трассировка стека (вызов getScanner происходит в NetworkCollection.fromSynapseList):
java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
at java.util.Scanner.<init>(Scanner.java:590)
at persistence.FileUtils.getScanner(FileUtils.java:34)
at calculation.NetworkCollection.fromSynapseList(NetworkCollection.java:89)
at processes.JobDispatcher.doInBackground(JobDispatcher.java:136)
at processes.JobDispatcher.doInBackground(JobDispatcher.java:1)
at javax.swing.SwingWorker$1.call(SwingWorker.java:277)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at javax.swing.SwingWorker.run(SwingWorker.java:316)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)