Java Android:为什么我会收到NullPointerException?
我正在尝试使用Android TMX Loader加载游戏地图。由于文件未加载,我一直有问题。我使用了提供的示例,只是替换了我的文件,但无论我使用什么路径,它都不会加载。我在加载该文件的行上获得一个未找到文件的异常,或者一个空指针异常。我已经证实,这些资产正在与WinRar一起投入APK,而且它们确实在那里 这是我的密码:Java Android:为什么我会收到NullPointerException?,java,android,Java,Android,我正在尝试使用Android TMX Loader加载游戏地图。由于文件未加载,我一直有问题。我使用了提供的示例,只是替换了我的文件,但无论我使用什么路径,它都不会加载。我在加载该文件的行上获得一个未找到文件的异常,或者一个空指针异常。我已经证实,这些资产正在与WinRar一起投入APK,而且它们确实在那里 这是我的密码: ImageView mapView; @Override protected void onCreate(Bundle savedInstanceState) {
ImageView mapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadWorld("World.tmx");
setContentView(R.layout.activity_main);
}
/*
* public void displayMap() { Display display =
* getWindowManager().getDefaultDisplay(); Point size = new Point();
* display.getSize(size); int width = size.x; int height = size.y;
*
* }
*/
public void loadWorld(String path) {
// Start the parser, get back TMX data object
TileMapData t = TMXLoader.readTMX(path, this);
mapView = (ImageView) findViewById(R.id.MapImage);
// Create a Bitmap from the tilemap data
Bitmap mapImage = TMXLoader.createBitmap(t, this, 0, t.layers.size());
// Set the imageview to show the map, if we have one
if (mapImage != null) {
mapView.setImageBitmap(mapImage);
}
// Map loading problem, inform the user.
else {
Toast errorMessage = Toast.makeText(getApplicationContext(),
"Map could not be loaded", Toast.LENGTH_LONG);
errorMessage.show();
}
}
以下是最新的LogCat堆栈:
12-31 07:44:25.046: E/AndroidRuntime(18074): FATAL EXCEPTION: main
12-31 07:44:25.046: E/AndroidRuntime(18074): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fionaheiss.shovelshovel/com.fionaheiss.shovelshovel.DisplayMap}: java.lang.NullPointerException
12-31 07:44:25.046: E/AndroidRuntime(18074): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2006)
12-31 07:44:25.046: E/AndroidRuntime(18074): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2031)
12-31 07:44:25.046: E/AndroidRuntime(18074): at android.app.ActivityThread.access$600(ActivityThread.java:126)
12-31 07:44:25.046: E/AndroidRuntime(18074): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1166)
12-31 07:44:25.046: E/AndroidRuntime(18074): at android.os.Handler.dispatchMessage(Handler.java:99)
12-31 07:44:25.046: E/AndroidRuntime(18074): at android.os.Looper.loop(Looper.java:137)
12-31 07:44:25.046: E/AndroidRuntime(18074): at android.app.ActivityThread.main(ActivityThread.java:4486)
12-31 07:44:25.046: E/AndroidRuntime(18074): at java.lang.reflect.Method.invokeNative(Native Method)
12-31 07:44:25.046: E/AndroidRuntime(18074): at java.lang.reflect.Method.invoke(Method.java:511)
12-31 07:44:25.046: E/AndroidRuntime(18074): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-31 07:44:25.046: E/AndroidRuntime(18074): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-31 07:44:25.046: E/AndroidRuntime(18074): at dalvik.system.NativeStart.main(Native Method)
12-31 07:44:25.046: E/AndroidRuntime(18074): Caused by: java.lang.NullPointerException
12-31 07:44:25.046: E/AndroidRuntime(18074): at com.fionaheiss.shovelshovel.DisplayMap.loadWorld(DisplayMap.java:38)
12-31 07:44:25.046: E/AndroidRuntime(18074): at com.fionaheiss.shovelshovel.DisplayMap.onCreate(DisplayMap.java:20)
12-31 07:44:25.046: E/AndroidRuntime(18074): at android.app.Activity.performCreate(Activity.java:4635)
12-31 07:44:25.046: E/AndroidRuntime(18074): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-31 07:44:25.046: E/AndroidRuntime(18074): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
12-31 07:44:25.046: E/AndroidRuntime(18074): ... 11 more
出了什么问题?我一辈子都搞不懂
非常感谢你帮助我 这意味着t或t.layers为空。此处
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadWorld("World.tmx"); //<< here
setContentView(R.layout.activity_main);
}
这将是
Bitmap-mapImage=TMXLoader.createBitmap(t,this,0,t.layers.size())代码>但是,它也会根据我设置的文件路径而变化…这表明t
为空。我怀疑,如果你给它错误的路径,就会发生这种情况……交换两行loadWorld(“World.tmx”);setContentView(R.layout.activity_main);在debugt
中确实是空的,所以显然我无法获得正确的文件路径。。。我尝试了大约10种不同的配置,但都不起作用。嗯,我尝试了这个,但仍然得到一个运行时异常
@seanhess:如果你这样做,那么在更改后必须在新日志后更改错误this@SeanHeiss:您放置的World.tmx文件在哪里?好的,我将用旧文件替换新文件。完成。它位于assets文件夹中,在我的项目的根目录下。正如我所说,所有资产都正确地打包到APK中。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadWorld("file:///android_asset/World.tmx");
}