一夫一妻制:Java.IO.FileNotFoundException

Monogame: Java.IO.FileNotFoundException

我正在学习本教程:https://developer.xamarin.com/guides/cross-platform/game_development/monogame/introduction/part2/

当我尝试 运行 代码时,我得到以下日志:

05-09 18:50:04.814 I/MonoDroid( 1319): UNHANDLED EXCEPTION:
05-09 18:50:04.854 I/MonoDroid( 1319): Java.IO.FileNotFoundException: Content/soccerball.png
05-09 18:50:04.854 I/MonoDroid( 1319):   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x94f3bb40 + 0x0002b> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Android.Runtime.JNIEnv.CallObjectMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue* parms) <0x9785e3f0 + 0x0009b> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Android.Content.Res.AssetManager.Open (System.String fileName) <0x94f3b0a0 + 0x000e7> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Microsoft.Xna.Framework.TitleContainer.OpenStream (System.String name) <0x94f355a0 + 0x00047> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Game1.Game1.LoadContent () <0x94f2dce8 + 0x00073> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Microsoft.Xna.Framework.Game.Initialize () <0x94f2d828 + 0x0010b> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Game1.Game1.Initialize () <0x94f2d800 + 0x00013> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Microsoft.Xna.Framework.Game.DoInitialize () <0x94f7ecf8 + 0x00026> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Microsoft.Xna.Framework.AndroidGamePlatform.BeforeUpdate (Microsoft.Xna.Framework.GameTime gameTime) <0x94f7eca8 + 0x00023> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Microsoft.Xna.Framework.Game.DoUpdate (Microsoft.Xna.Framework.GameTime gameTime) <0x94f7ec30 + 0x00026> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Microsoft.Xna.Framework.Game.Tick () <0x94f7e378 + 0x00503> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Microsoft.Xna.Framework.AndroidGameWindow.OnUpdateFrame (System.Object sender, OpenTK.FrameEventArgs frameEventArgs) <0x94f7def8 + 0x0007f> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at OpenTK.GameViewBase.OnUpdateFrame (OpenTK.FrameEventArgs e) <0x94f7dec8 + 0x00029> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at OpenTK.Platform.Android.AndroidGameView.UpdateFrameInternal (OpenTK.FrameEventArgs e) <0x94f7de98 + 0x0002c> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at OpenTK.Platform.Android.AndroidGameView.RunIteration (CancellationToken token) <0x95703130 + 0x00193> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at OpenTK.Platform.Android.AndroidGameView+<StartThread>c__AnonStorey0.<>m__0 (System.Object _) <0x95703108 + 0x00023> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Android.App.SyncContext+<Send>c__AnonStorey1.<>m__0 () <0x957030d0 + 0x0001b> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Java.Lang.Thread+RunnableImplementor.Run () <0x95703010 + 0x00027> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at Java.Lang.IRunnableInvoker.n_Run (IntPtr jnienv, IntPtr native__this) <0x95702fb0 + 0x00034> in <filename unknown>:0 
05-09 18:50:04.854 I/MonoDroid( 1319):   at (wrapper dynamic-method) System.Object:9f42c320-9c45-468f-80ae-85ed8ae9d74a (intptr,intptr)
05-09 18:50:04.854 I/MonoDroid( 1319):   --- End of managed exception stack trace ---
05-09 18:50:04.854 I/MonoDroid( 1319): java.io.FileNotFoundException: Content/soccerball.png
05-09 18:50:04.854 I/MonoDroid( 1319):  at android.content.res.AssetManager.openAsset(Native Method)
05-09 18:50:04.854 I/MonoDroid( 1319):  at android.content.res.AssetManager.open(AssetManager.java:316)
05-09 18:50:04.854 I/MonoDroid( 1319):  at android.content.res.AssetManager.open(AssetManager.java:290)
05-09 18:50:04.854 I/MonoDroid( 1319):  at mono.java.lang.RunnableImplementor.n_run(Native Method)
05-09 18:50:04.854 I/MonoDroid( 1319):  at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:29)
05-09 18:50:04.854 I/MonoDroid( 1319):  at android.os.Handler.handleCallback(Handler.java:733)
05-09 18:50:04.854 I/MonoDroid( 1319):  at android.os.Handler.dispatchMessage(Handler.java:95)
05-09 18:50:04.854 I/MonoDroid( 1319):  at android.os.Looper.loop(Looper.java:136)
05-09 18:50:04.854 I/MonoDroid( 1319):  at android.app.ActivityThread.main(ActivityThread.java:5001)
05-09 18:50:04.854 I/MonoDroid( 1319):  at java.lang.reflect.Method.invokeNative(Native Method)
05-09 18:50:04.854 I/MonoDroid( 1319):  at java.lang.reflect.Method.invoke(Method.java:515)
05-09 18:50:04.854 I/MonoDroid( 1319):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
05-09 18:50:04.854 I/MonoDroid( 1319):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
05-09 18:50:04.854 I/MonoDroid( 1319):  at dalvik.system.NativeStart.main(Native Method)
05-09 18:50:04.858 D/AndroidRuntime( 1319): Shutting down VM
05-09 18:50:04.858 W/dalvikvm( 1319): threadid=1: thread exiting with uncaught exception (group=0xa8c63b20)
05-09 18:50:04.882 E/AndroidRuntime( 1319): FATAL EXCEPTION: main
05-09 18:50:04.882 E/AndroidRuntime( 1319): Process: Game1.Game1, PID: 1319
05-09 18:50:04.882 E/AndroidRuntime( 1319): java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at dalvik.system.NativeStart.main(Native Method)
05-09 18:50:04.882 E/AndroidRuntime( 1319): Caused by: java.lang.reflect.InvocationTargetException
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at java.lang.reflect.Method.invokeNative(Native Method)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at java.lang.reflect.Method.invoke(Method.java:515)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     ... 2 more
05-09 18:50:04.882 E/AndroidRuntime( 1319): Caused by: java.io.FileNotFoundException: Content/soccerball.png
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at android.content.res.AssetManager.openAsset(Native Method)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at android.content.res.AssetManager.open(AssetManager.java:316)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at android.content.res.AssetManager.open(AssetManager.java:290)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at mono.java.lang.RunnableImplementor.n_run(Native Method)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:29)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at android.os.Handler.handleCallback(Handler.java:733)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at android.os.Handler.dispatchMessage(Handler.java:95)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at android.os.Looper.loop(Looper.java:136)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     at android.app.ActivityThread.main(ActivityThread.java:5001)
05-09 18:50:04.882 E/AndroidRuntime( 1319):     ... 5 more

soccerball.pngContent 文件夹和 Content.mgcb 东西中都有那个名字。

soccerball.png 的构建操作是内容(如果重要的话)。

相关代码:

protected override void LoadContent()
{
   // Create a new SpriteBatch, which can be used to draw textures.
   spriteBatch = new SpriteBatch(GraphicsDevice);

   // TODO: use this.Content to load your game content here
   using (var stream = TitleContainer.OpenStream("Content/soccerball.png"))
   {
      ballTexture = Texture2D.FromStream(this.GraphicsDevice, stream);
   }
}

在您的 Xamarin.Android 项目中,确保 Content 目录位于 Android Assets 目录下并标记为构建类型:AndroidAsset

├── Assets
│   ├── AboutAssets.txt
│   └── Content
│       └── soccerball.png

Xamarin.iOS 项目上确保内容目录位于项目的根目录中并标记为构建类型:BundleResource

├── Content
│   ├── soccerball.png

您还可以在 Github 存储库中看到完整的工作示例:

https://github.com/xamarin/mobile-samples/tree/master/WalkingGameMG/Android