我尝试使用共同的核心代码目录和每个代码的平台相关部分为Android和JavaFX构建一个java程序。这些平台相关选项之一称为资源,它应该加载文本,图像和(最终)音频文件。 JavaFX版本运行良好,程序的框架出现并可以使用。但是,Android版本不会显示任何内容。我已经追溯到这样一个事实:我的资源没有加载,抛出各种异常,大部分都是NullPointerExceptions。我不确定问题是由于没有包含资源还是给错误的地方查看程序。我的gradle文件目前有以下相关内容:
sourceSets {
main.java.srcDirs += '../../Both'
main.res.srcDirs += '../../Resources'
}
../../Both目录正确地构建到代码中,因为它正确构建和运行,并且Both Directory和Android目录都使用它。 但是,资源包括(大部分)一些Art子目录。
我已经尝试了以下代码来读取文件,主要来自javafx等效文件(有效):
private static String getPath(String resource)
{
return "/Resources/"+resource;
}
public static ArrayList<String> loadText(String resource)
{
try{
if(filecache.containsKey(resource))
return filecache.get(resource);
InputStream in = R.getClass().getResourceAsStream(getPath(resource));
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
ArrayList<String> lines = new ArrayList<>();
String t;
while((t = reader.readLine()) != null)
lines.add(t);
filecache.put(resource, lines);
return lines;
} catch(Exception e){Debug.log(e.toString());}
return new ArrayList<>();
}
使用我在这里找到的一些代码,我也试过这个,以及它的几个变种,但都没有成功。 (使用相同的getPath()方法)
ArrayList<String> res = new ArrayList<String>();
try {
InputStream inputStream = new android.content.res.Resources().(getPath(resource));
if ( inputStream != null ) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String receiveString = "";
while ( (receiveString = bufferedReader.readLine()) != null ) {
res.add(receiveString);
}
}
return res;
} catch(Exception e){Debug.log("While opening: " + resource);Debug.log(e);}
return new ArrayList<String>();
}
这两个构建,但抛出异常并且不加载文件。 有关如何阅读文件的任何见解?谢谢!