Java Can';t将变量传递给函数

Java Can';t将变量传递给函数,java,android,Java,Android,编辑:我照Tritan Man说的做了,这显然奏效了。谢谢 我对开发非常陌生,正在制作一个简单的“打鼹鼠”应用程序。在整个程序中,我需要一些变量,比如一个用来报告摩尔是上升还是下降的变量。如果在此之后定义变量: public class WhackAMole extends Activity { …我的应用程序崩溃,并向我发送消息说应用程序已停止 如果我将变量放入onCreate函数中,然后将它们传递给每个函数,我的一个处理程序会用红色下划线表示构造函数对象(我的变量)未定义。-尽管我在所有地

编辑:我照Tritan Man说的做了,这显然奏效了。谢谢

我对开发非常陌生,正在制作一个简单的“打鼹鼠”应用程序。在整个程序中,我需要一些变量,比如一个用来报告摩尔是上升还是下降的变量。如果在此之后定义变量:

public class WhackAMole extends Activity {
…我的应用程序崩溃,并向我发送消息说应用程序已停止

如果我将变量放入
onCreate
函数中,然后将它们传递给每个函数,我的一个处理程序会用红色下划线表示
构造函数对象(我的变量)未定义。
-尽管我在所有地方都定义了它。这就是它的样子:

    mHandler.postDelayed(new Runnable(Mole1_Btn, Mole2_Btn, Mole3_Btn, mole1_on, mole2_on, mole3_on) 
    {
        public void run(ImageView Mole1_Btn, ImageView Mole2_Btn, ImageView Mole3_Btn, boolean mole1_on, boolean mole2_on, boolean mole3_on) 
        {
            changeMole1(Mole1_Btn, Mole2_Btn, Mole3_Btn, mole1_on, mole2_on, mole3_on);
        }
    }, wait);
}
这一切都被强调了。为什么在第一个示例中会崩溃,或者为什么处理程序会为第二个示例提供错误

这是我将变量放在开头所说的位置时的错误日志:

08-08 12:05:27.622: D/libEGL(9830): loaded /system/lib/egl/libEGL_adreno200.so
08-08 12:05:27.622: D/libEGL(9830): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
08-08 12:05:27.632: D/libEGL(9830): loaded /system/lib/egl/libGLESv2_adreno200.so
08-08 12:05:27.632: I/Adreno200-EGL(9830): <qeglDrvAPI_eglInitialize:265>: EGL 1.4 QUALCOMM build:  (CL3544079)
08-08 12:05:27.632: I/Adreno200-EGL(9830): Build Date: 03/28/13 Thu
08-08 12:05:27.632: I/Adreno200-EGL(9830): Local Branch: adreno_20130328
08-08 12:05:27.632: I/Adreno200-EGL(9830): Remote Branch: 
08-08 12:05:27.632: I/Adreno200-EGL(9830): Local Patches: 
08-08 12:05:27.632: I/Adreno200-EGL(9830): Reconstruct Branch: 
08-08 12:05:27.702: D/OpenGLRenderer(9830): Enabling debug mode 0
08-08 12:06:06.750: D/GestureDetector(9830): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 7 mFalseSizeCnt:0
08-08 12:06:06.811: D/AndroidRuntime(9830): Shutting down VM
08-08 12:06:06.811: W/dalvikvm(9830): threadid=1: thread exiting with uncaught exception (group=0x41be1ac8)
08-08 12:06:06.821: E/AndroidRuntime(9830): FATAL EXCEPTION: main
08-08 12:06:06.821: E/AndroidRuntime(9830): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.WhackAMole}: java.lang.NullPointerException
08-08 12:06:06.821: E/AndroidRuntime(9830):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2172)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2296)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at android.app.ActivityThread.access$700(ActivityThread.java:151)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at android.os.Looper.loop(Looper.java:137)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at android.app.ActivityThread.main(ActivityThread.java:5293)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at java.lang.reflect.Method.invokeNative(Native Method)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at java.lang.reflect.Method.invoke(Method.java:511)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at dalvik.system.NativeStart.main(Native Method)
08-08 12:06:06.821: E/AndroidRuntime(9830): Caused by: java.lang.NullPointerException
08-08 12:06:06.821: E/AndroidRuntime(9830):     at android.app.Activity.findViewById(Activity.java:1886)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at com.example.myfirstapp.WhackAMole.<init>(WhackAMole.java:17)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at java.lang.Class.newInstanceImpl(Native Method)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at java.lang.Class.newInstance(Class.java:1319)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at android.app.Instrumentation.newActivity(Instrumentation.java:1071)
08-08 12:06:06.821: E/AndroidRuntime(9830):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2163)
08-08 12:06:06.821: E/AndroidRuntime(9830):     ... 11 more
08-08 12:05:27.622:D/libEGL(9830):loaded/system/lib/egl/libEGL_adreno200.so
08-08 12:05:27.622:D/libEGL(9830):loaded/system/lib/egl/libGLESv1_CM_adreno200.so
08-08 12:05:27.632:D/libEGL(9830):loaded/system/lib/egl/libGLESv2_adreno200.so
08-08 12:05:27.632:I/Adreno200 EGL(9830)::EGL 1.4高通公司构建:(CL3544079)
08-08 12:05:27.632:I/Adreno200 EGL(9830):建造日期:2013年3月28日星期四
08-08 12:05:27.632:I/Adreno200 EGL(9830):当地分支机构:adreno_20130328
08-08 12:05:27.632:I/Adreno200 EGL(9830):远程分支:
08-08 12:05:27.632:I/Adreno200 EGL(9830):局部贴片:
08-08 12:05:27.632:I/Adreno200 EGL(9830):重建分支:
08-08 12:05:27.702:D/OpenGLRenderer(9830):启用调试模式0
08-08 12:06:06.750:D/GestureDetector(9830):[Surface Touch Event]MSWeetdown False,mLRSDCnt:-1 mTouchCnt:7 mFalseSizeCnt:0
08-08 12:06:06.811:D/AndroidRuntime(9830):关闭虚拟机
08-08 12:06:06.811:W/dalvikvm(9830):threadid=1:线程退出时出现未捕获异常(组=0x41be1ac8)
08-08 12:06:06.821:E/AndroidRuntime(9830):致命异常:主
08-08 12:06:06.821:E/AndroidRuntime(9830):java.lang.RuntimeException:无法实例化活动组件信息{com.example.myfirstapp/com.example.myfirstapp.WhackAMole}:java.lang.NullPointerException
08-08 12:06:06.821:E/AndroidRuntime(9830):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2172)
08-08 12:06:06.821:E/AndroidRuntime(9830):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2296)
08-08 12:06:06.821:E/AndroidRuntime(9830):在android.app.ActivityThread.access$700(ActivityThread.java:151)
08-08 12:06:06.821:E/AndroidRuntime(9830):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
08-08 12:06:06.821:E/AndroidRuntime(9830):位于android.os.Handler.dispatchMessage(Handler.java:99)
08-08 12:06:06.821:E/AndroidRuntime(9830):在android.os.Looper.loop(Looper.java:137)上
08-08 12:06:06.821:E/AndroidRuntime(9830):位于android.app.ActivityThread.main(ActivityThread.java:5293)
08-08 12:06:06.821:E/AndroidRuntime(9830):位于java.lang.reflect.Method.Invokenactive(本机方法)
08-08 12:06:06.821:E/AndroidRuntime(9830):位于java.lang.reflect.Method.invoke(Method.java:511)
08-08 12:06:06.821:E/AndroidRuntime(9830):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
08-08 12:06:06.821:E/AndroidRuntime(9830):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
08-08 12:06:06.821:E/AndroidRuntime(9830):在dalvik.system.NativeStart.main(本机方法)
08-08 12:06:06.821:E/AndroidRuntime(9830):由以下原因引起:java.lang.NullPointerException
08-08 12:06:06.821:E/AndroidRuntime(9830):在android.app.Activity.findViewById(Activity.java:1886)上
08-08 12:06:06.821:E/AndroidRuntime(9830):在com.example.myfirstapp.WhackAMole.(WhackAMole.java:17)
08-08 12:06:06.821:E/AndroidRuntime(9830):位于java.lang.Class.newInstanceImpl(本机方法)
08-08 12:06:06.821:E/AndroidRuntime(9830):位于java.lang.Class.newInstance(Class.java:1319)
08-08 12:06:06.821:E/AndroidRuntime(9830):在android.app.Instrumentation.newActivity(Instrumentation.java:1071)上
08-08 12:06:06.821:E/AndroidRuntime(9830):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2163)上
08-08 12:06:06.821:E/AndroidRuntime(9830):。。。还有11个

runnable不是这样工作的。您不需要使用构造函数和参数来运行(),然后您需要对传递给匿名类的任何变量使用final关键字。

这是一个错误的实现,正确的可运行实现具有此基本结构

new Runnable() {
  @Override
  public void run() {
    //the code to be run
  }
};

编辑:要在run()中使用参数,可以将其声明为final

是否通过调试器运行此操作?这不会给您一个更详细的错误吗?run方法带有下划线,因为
Runnable
没有这样的构造函数,您所做的不是创建构造函数。至于错误,你需要发布错误的堆栈跟踪。查看错误日志会很有帮助,你能解释一下你到底想做什么吗。我无法从你的问题中理解你的想法。我发布了它,但我显然发布了不正确的内容。谢谢,但是有没有办法像我第一次发布一样,只在一段时间后才能运行?或者至少是我认为它在做什么。参数已经是最终的,或者至少它们在onCreate函数中。你可以在runnable中创建一个while或for循环。而(数量){..};如果您的意思是在run()中执行代码之前添加一个时间延迟,那么可以使用Thread.sleep(毫秒)来执行