java - 致命异常主要(RuntimeException)

标签 java android sdk

源代码(osmand)没有错误

我使用了 eclipse 和 sdk 模拟器 2.2,从 googlecode checkout (osmand应用程序)

我的代码:

public void onCreate(){ 
    super.onCreate(); 
    routingHelper = new RoutingHelper(OsmandSettings.getApplicationMode(OsmandSettings.getPrefs(OsmandAp­plication.this)), OsmandApplication.this, player); 
    manager = new ResourceManager(this); 
    daynightHelper = new DayNightHelper(this); 
    uiHandler = new Handler(); 
    startApplication(); 
} 

这些都是 logcat 中的错误:

05-04 07:53:01.807: ERROR / AndroidRuntime (308): FATAL EXCEPTION:     main 
05-04 07:53:01.807: ERROR / AndroidRuntime (308): java.lang.RuntimeException: Unable to create application net.osmand.activities.OsmandApplication: java.lang.IllegalArgumentException: InputStream can not be null 
05-04 07:53:01.807: ERROR / AndroidRuntime (308): Has android.app.ActivityThread.handleBindApplication (ActivityThread.java: 4247) 
05-04 07:53:01.807: ERROR / AndroidRuntime (308): Has android.app.ActivityThread.access $ 3000 (ActivityThread.java: 125) 
05-04 07:53:01.807: ERROR / AndroidRuntime (308): at $ android.app.ActivityThread H.handleMessage (ActivityThread.java: 2071) 
05-04 07:53:01.807: ERROR / AndroidRuntime (308): Has android.os.Handler.dispatchMessage (Handler.java: 99) 
05-04 07:53:01.807: ERROR / AndroidRuntime (308): Has android.os.Looper.loop (Looper.java: 123) 
05-04 07:53:01.807: ERROR / AndroidRuntime (308): Has android.app.ActivityThread.main (ActivityThread.java: 4627) 
05-04 07:53:01.807: ERROR / AndroidRuntime (308): Has java.lang.reflect.Method.invokeNative (Native Method 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at java.lang.reflect.Method.invoke(Method.java:521) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at com.android.internal.os.ZygoteInit $MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at dalvik.system.NativeStart.main(Native Method) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308): Caused by: java.lang.IllegalArgumentException: InputStream cannot be null 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at javax.xml.parsers.SAXParser.parse(SAXParser.java:185) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at net.osmand.render.OsmandRenderingRulesParser.parseRenderingRules(OsmandRend­eringRulesParser.java: 104) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at net.osmand.render.BaseOsmandRender.init(BaseOsmandRender.java:41) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at net.osmand.render.RendererRegistry.loadRenderer(RendererRegistry.java: 116) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at net.osmand.render.RendererRegistry.loadRenderer(RendererRegistry.java: 103) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at net.osmand.render.RendererRegistry.getRenderer(RendererRegistry.java: 93) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at net.osmand.render.RendererRegistry.getRenderer(RendererRegistry.java: 84) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at net.osmand.render.RendererRegistry.defaultRender(RendererRegistry.java: 54) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at net.osmand.render.OsmandRenderer.<init>(OsmandRenderer.java:239) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at net.osmand.render.MapRenderRepositories.<init>(MapRenderRepositories.java: 79) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at net.osmand.ResourceManager.<init>(ResourceManager.java:98) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at net.osmand.activities.OsmandApplication.onCreate(OsmandApplication.java: 51) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java: 969) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4244) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):     ... 10 more

最佳答案

在运行时(执行时),您将 null 值传递给某个期望/需要 InputStream (或任何子类)实例的方法。编译器无法检测到此类错误,因此您的源代码可以编译。

调试:在源代码中找到导致运行时异常的代码行。在该行中,您会发现一些 InputStream 变量,并且您必须分析源代码以回答为什么以及在哪些条件该变量保存null 而不是流引用。

<小时/>

从你的堆栈跟踪中我看到这三行暗示了问题:

05-04 07:53:01.807: ERROR/AndroidRuntime(308): Caused by: java.lang.IllegalArgumentException: InputStream cannot be null 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at javax.xml.parsers.SAXParser.parse(SAXParser.java:185) 
05-04 07:53:01.807: ERROR/AndroidRuntime(308):at net.osmand.render.OsmandRenderingRulesParser.parseRenderingRules(OsmandRend­eringRulesParser.java: 104) 

应用程序尝试打开一个 xml 文件(日志中未知名称),但应用程序找不到此 xml。

因此,您必须找出需要哪个文件(该文件应包含某种渲染规则)以及它的位置存储以供应用程序查找它。一旦解析器可以加载丢失的文件,错误就会消失。

关于java - 致命异常主要(RuntimeException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5880609/

相关文章:

Android启动WebBrowser Intent产生SecurityException

android - 如何在 Eclipse 中安装 Android 4.0 (API 14)?

java - 注释处理器

java - Camel 航线需要很长时间才能优雅地关闭

javascript - 错误 : Unable to determine the current character, it is not a string, number, array, or object in react-native for android

android - NDK22 升级后,构建失败并出现 "cannot open crtbegin_so.o/crtend_so.o"错误

android - 是否有像 DatePicker 这样的组件来选择 String 值?

sdk - Google Cloud SDK gcloud init

gradle - Android Studio-Gradle失败-Intel Atom x86

java - 当两个文本字段相等时启用 JButton