gpt4 book ai didi

java - 创建按钮时出现我不明白的奇怪错误

转载 作者:行者123 更新时间:2023-12-01 11:43:14 24 4
gpt4 key购买 nike

所有内容主要在标题中进行解释,我会尽可能详细地说明。我正在制作一个android游戏应用程序,我为在DrawingView类中的canvas中绘制的圆创建了一个唯一的id,因为它不能在xml中引用,我必须在java中将id创建为int,以便java可以找到id并将其用作按钮。我相信你们现在都很困惑,我将继续尽我最大的努力来解释。下面是被调用的主文件的代码

public class Main extends Activity {
DrawingView v;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);


LinearLayout layout1 = new LinearLayout (this);
FrameLayout game = new FrameLayout(this);
DrawingView v = new DrawingView (this);

TextView myText = new TextView(this);

int w = getResources().getInteger(DrawingView.redColor);
Button redCircle = (Button) findViewById(w);



redCircle.setWidth(300);
redCircle.setText("Start Game");


layout1.addView(myText);
layout1.addView(redCircle);
//redCircle.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

game.addView(v);
game.addView(layout1);
setContentView(game);
redCircle.setOnClickListener((OnClickListener) this);
}
public void onClick(View v) {
Intent intent = new Intent(this, Main.class);
startActivity(intent);

// re-starts this activity from game-view. add this.finish(); to remove from stack
}

@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

并不是真正必要的,但为了帮助您理解我在这里想要完成的任务,DrawingView 类会在下面创建绿色或红色的随机圆圈。

public class DrawingView extends View {



public DrawingView(Context context) {
super(context);
// TODO Auto-generated constructor stub

}
RectF rectf = new RectF(0, 0, 200, 0);

private static final int w = 100;
public static int lastColor = Color.BLACK;
private final Random random = new Random();
private final Paint paint = new Paint();
private final int radius = 230;
private final Handler handler = new Handler();
public static int redColor = Color.RED;
public static int greenColor = Color.GREEN;

private final Runnable updateCircle = new Runnable() {
@Override
public void run() {
lastColor = random.nextInt(2) == 1 ? redColor : greenColor;
paint.setColor(lastColor);
invalidate();
handler.postDelayed(this, 1000);

}
};



@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
handler.post(updateCircle);
}

@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
handler.removeCallbacks(updateCircle);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// your other stuff here
canvas.drawCircle(random.nextInt(canvas.getWidth()-radius/2) + radius/2f, random.nextInt(canvas.getHeight()-radius/2) + radius/2f, radius, paint);
}

//Bitmap.Config conf = Bitmap.Config.ARGB_8888; // see other conf types

//private int h = 100;
//@SuppressLint("DrawAllocation")
//Bitmap bmp = Bitmap.createBitmap(w, h, conf); // this creates a MUTABLE bitmap
//Canvas canvas = new Canvas(bmp);

/*
private Object canvas(Bitmap bmp) {
// TODO Auto-generated method stub
return null;
}
*/


}

更重要的是应用程序崩溃后显示的日志猫错误

03-30 02:27:27.903: E/AndroidRuntime(3104): FATAL EXCEPTION: main
03-30 02:27:27.903: E/AndroidRuntime(3104): Process: com.Tripps.thesimplegame, PID: 3104
03-30 02:27:27.903: E/AndroidRuntime(3104): java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
03-30 02:27:27.903: E/AndroidRuntime(3104): at com.Tripps.thesimplegame.DrawingView.onDraw(DrawingView.java:67)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.draw(View.java:15114)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.updateDisplayListIfDirty(View.java:14048)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.getDisplayList(View.java:14071)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.draw(View.java:14838)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.updateDisplayListIfDirty(View.java:14043)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.getDisplayList(View.java:14071)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.draw(View.java:14838)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.updateDisplayListIfDirty(View.java:14043)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.getDisplayList(View.java:14071)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.draw(View.java:14838)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.updateDisplayListIfDirty(View.java:14043)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.getDisplayList(View.java:14071)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.draw(View.java:14838)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.draw(View.java:15117)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.widget.FrameLayout.draw(FrameLayout.java:592)
03-30 02:27:27.903: E/AndroidRuntime(3104): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2595)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.updateDisplayListIfDirty(View.java:14048)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.View.getDisplayList(View.java:14071)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:266)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:272)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:311)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2492)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2337)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1968)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.Choreographer.doCallbacks(Choreographer.java:580)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.Choreographer.doFrame(Choreographer.java:550)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.os.Handler.handleCallback(Handler.java:739)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.os.Handler.dispatchMessage(Handler.java:95)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.os.Looper.loop(Looper.java:135)
03-30 02:27:27.903: E/AndroidRuntime(3104): at android.app.ActivityThread.main(ActivityThread.java:5221)
03-30 02:27:27.903: E/AndroidRuntime(3104): at java.lang.reflect.Method.invoke(Native Method)
03-30 02:27:27.903: E/AndroidRuntime(3104): at java.lang.reflect.Method.invoke(Method.java:372)
03-30 02:27:27.903: E/AndroidRuntime(3104): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-30 02:27:27.903: E/AndroidRuntime(3104): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
03-30 02:38:46.269: D/OpenGLRenderer(3167): Render dirty regions requested: true
03-30 02:38:46.276: D/(3167): HostConnection::get() New Host Connection established 0xae0add60, tid 3167
03-30 02:38:46.287: D/Atlas(3167): Validating map...
03-30 02:38:46.379: D/(3167): HostConnection::get() New Host Connection established 0xa6c52140, tid 3182
03-30 02:38:46.427: I/OpenGLRenderer(3167): Initialized EGL, version 1.4
03-30 02:38:46.473: D/OpenGLRenderer(3167): Enabling debug mode 0
03-30 02:38:46.550: W/EGL_emulation(3167): eglSurfaceAttrib not implemented
03-30 02:38:46.550: W/OpenGLRenderer(3167): Failed to set EGL_SWAP_BEHAVIOR on surface 0xae0ed4a0, error=EGL_SUCCESS
03-30 03:01:54.523: W/ResourceType(3228): No known package when getting value for resource number 0xffff0000
03-30 03:01:54.523: D/AndroidRuntime(3228): Shutting down VM
03-30 03:01:54.524: E/AndroidRuntime(3228): FATAL EXCEPTION: main
03-30 03:01:54.524: E/AndroidRuntime(3228): Process: com.Tripps.thesimplegame, PID: 3228
03-30 03:01:54.524: E/AndroidRuntime(3228): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Tripps.thesimplegame/com.Tripps.thesimplegame.Main}: android.content.res.Resources$NotFoundException: Resource ID #0xffff0000
03-30 03:01:54.524: E/AndroidRuntime(3228): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
03-30 03:01:54.524: E/AndroidRuntime(3228): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
03-30 03:01:54.524: E/AndroidRuntime(3228): at android.app.ActivityThread.access$800(ActivityThread.java:144)
03-30 03:01:54.524: E/AndroidRuntime(3228): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
03-30 03:01:54.524: E/AndroidRuntime(3228): at android.os.Handler.dispatchMessage(Handler.java:102)
03-30 03:01:54.524: E/AndroidRuntime(3228): at android.os.Looper.loop(Looper.java:135)
03-30 03:01:54.524: E/AndroidRuntime(3228): at android.app.ActivityThread.main(ActivityThread.java:5221)
03-30 03:01:54.524: E/AndroidRuntime(3228): at java.lang.reflect.Method.invoke(Native Method)
03-30 03:01:54.524: E/AndroidRuntime(3228): at java.lang.reflect.Method.invoke(Method.java:372)
03-30 03:01:54.524: E/AndroidRuntime(3228): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-30 03:01:54.524: E/AndroidRuntime(3228): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
03-30 03:01:54.524: E/AndroidRuntime(3228): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0xffff0000
03-30 03:01:54.524: E/AndroidRuntime(3228): at android.content.res.Resources.getValue(Resources.java:1233)
03-30 03:01:54.524: E/AndroidRuntime(3228): at android.content.res.Resources.getInteger(Resources.java:989)
03-30 03:01:54.524: E/AndroidRuntime(3228): at com.Tripps.thesimplegame.Main.onCreate(Main.java:34)
03-30 03:01:54.524: E/AndroidRuntime(3228): at android.app.Activity.performCreate(Activity.java:5933)
03-30 03:01:54.524: E/AndroidRuntime(3228): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
03-30 03:01:54.524: E/AndroidRuntime(3228): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
03-30 03:01:54.524: E/AndroidRuntime(3228): ... 10 more
03-30 03:03:04.088: W/ResourceType(3288): No known package when getting value for resource number 0xffff0000
03-30 03:03:04.089: D/AndroidRuntime(3288): Shutting down VM
03-30 03:03:04.089: E/AndroidRuntime(3288): FATAL EXCEPTION: main
03-30 03:03:04.089: E/AndroidRuntime(3288): Process: com.Tripps.thesimplegame, PID: 3288
03-30 03:03:04.089: E/AndroidRuntime(3288): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Tripps.thesimplegame/com.Tripps.thesimplegame.Main}: android.content.res.Resources$NotFoundException: Resource ID #0xffff0000
03-30 03:03:04.089: E/AndroidRuntime(3288): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
03-30 03:03:04.089: E/AndroidRuntime(3288): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
03-30 03:03:04.089: E/AndroidRuntime(3288): at android.app.ActivityThread.access$800(ActivityThread.java:144)
03-30 03:03:04.089: E/AndroidRuntime(3288): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
03-30 03:03:04.089: E/AndroidRuntime(3288): at android.os.Handler.dispatchMessage(Handler.java:102)
03-30 03:03:04.089: E/AndroidRuntime(3288): at android.os.Looper.loop(Looper.java:135)
03-30 03:03:04.089: E/AndroidRuntime(3288): at android.app.ActivityThread.main(ActivityThread.java:5221)
03-30 03:03:04.089: E/AndroidRuntime(3288): at java.lang.reflect.Method.invoke(Native Method)
03-30 03:03:04.089: E/AndroidRuntime(3288): at java.lang.reflect.Method.invoke(Method.java:372)
03-30 03:03:04.089: E/AndroidRuntime(3288): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-30 03:03:04.089: E/AndroidRuntime(3288): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
03-30 03:03:04.089: E/AndroidRuntime(3288): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0xffff0000
03-30 03:03:04.089: E/AndroidRuntime(3288): at android.content.res.Resources.getValue(Resources.java:1233)
03-30 03:03:04.089: E/AndroidRuntime(3288): at android.content.res.Resources.getInteger(Resources.java:989)
03-30 03:03:04.089: E/AndroidRuntime(3288): at com.Tripps.thesimplegame.Main.onCreate(Main.java:34)
03-30 03:03:04.089: E/AndroidRuntime(3288): at android.app.Activity.performCreate(Activity.java:5933)
03-30 03:03:04.089: E/AndroidRuntime(3288): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
03-30 03:03:04.089: E/AndroidRuntime(3288): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
03-30 03:03:04.089: E/AndroidRuntime(3288): ... 10 more
03-30 03:03:34.502: I/Process(3288): Sending signal. PID: 3288 SIG: 9

最佳答案

您在以下位置收到错误:

canvas.drawCircle(random.nextInt(canvas.getWidth()-radius/2) + radius/2f, random.nextInt(canvas.getHeight()-radius/2) + radius/2f, radius, paint);

因为对象 Canvas 没有宽度或高度(为空)

原因:

您的代码添加了如下 View :

LinearLayout layout1 = new LinearLayout (this);
FrameLayout game = new FrameLayout(this);
DrawingView v = new DrawingView (this);

TextView myText = new TextView(this);

int w = getResources().getInteger(DrawingView.redColor);
Button redCircle = (Button) findViewById(w);



redCircle.setWidth(300);
redCircle.setText("Start Game");


layout1.addView(myText);
layout1.addView(redCircle);
//redCircle.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

game.addView(v);
game.addView(layout1);

But at the time of

game.addView(v);

v do not have any views referenced so the null object view is added in game

所以请先在 v 中添加一些 View ,即文本或图像,然后调用

 game.addView(v);

这是您的错误的解决方案

关于java - 创建按钮时出现我不明白的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29341310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com