我有一个小程序需要从带有 .java 文件的 eclipse 包中的本地文本文件加载保存的数据。在这个问题中使用它的名字是“saveData.txt”。
当我通过 Eclipse 运行小程序时,一切正常。但是,一旦我将其 jar 起来(确保包含 txt 文件和 .classpath 文件)并将其放到网站上,applet 就无法加载。我在 InputStreamReader 上收到 Unknown source 错误。我在下面包含了用于加载和保存的代码。创建 InputStreamReader Line 时出现错误。
我搞砸的任何想法?
private ArrayList loadLocations() throws IOException{
ArrayList locations = new ArrayList();
InputStream is = getClass().getResourceAsStream("\saveData.txt");
;; BELOW LINE is where exception is thrown
InputStreamReader isr = new InputStreamReader(is);
mInputStream = new BufferedReader(isr);
String line = mInputStream.readLine();
while (line != null && !(line.equals(""))) {
locations.add(new Location(line));
line = mInputStream.readLine();
}
if (mInputStream != null)
mInputStream.close();
Collections.sort(locations);
return locations;
}
private void saveLocations() throws IOException {
try {
mOutputStream = new PrintWriter(new File(getClass().getResource("\\saveData.txt").toURI()));
}
catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
;
for (Location l : locations) {
mOutputStream.print(l.getRawListing()+ "\n");
}
if (mOutputStream != null)
mOutputStream.close();
}
完整的错误详细信息(在浏览器中运行时)
Java 插件 1.6.0_24 使用 JRE 版本 1.6.0_24-b07 Java HotSpot(TM) 客户端虚拟机 用户主目录 = C:\Users\Ross -------------------------------------------------- -- c: 清除控制台窗口 f:在终结队列中终结对象 g:垃圾收集 h:显示此帮助信息 l:转储类加载器列表 m:打印内存使用情况 o:触发日志记录 问:隐藏控制台 r:重载策略配置 s:转储系统和部署属性 t:转储线程列表 v: 转储线程堆栈 x:清除类加载器缓存 0-5:将跟踪级别设置为 -------------------------------------------------- -- java.lang.reflect.InvocationTargetException 在 com.sun.deploy.util.DeployAWTUtil.invokeAndWait(未知来源) 在 sun.plugin2.applet.Plugin2Manager.runOnEDT(未知来源) 在 sun.plugin2.applet.Plugin2Manager.createApplet(未知来源) 在 sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(未知来源) 在 java.lang.Thread.run(未知来源) 引起:java.lang.NullPointerException 在 java.io.Reader.(未知来源) 在 java.io.InputStreamReader.(未知来源) 在listings.listings.loadLocations(listings.java:624) 在listings.listings.setup(listings.java:667) 在listings.listings.(listings.java:59) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源) 在 java.lang.reflect.Constructor.newInstance(未知来源) 在 java.lang.Class.newInstance0(未知来源) 在 java.lang.Class.newInstance(未知来源) 在 sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source) 在 java.awt.event.InvocationEvent.dispatch(未知来源) 在 java.awt.EventQueue.dispatchEventImpl(未知来源) 在 java.awt.EventQueue.access$000(未知来源) 在 java.awt.EventQueue$1.run(未知来源) 在 java.awt.EventQueue$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue.dispatchEvent(未知来源) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.run(未知来源) 异常:java.lang.reflect.InvocationTargetException