程序不报错但无法运行

开发者在运行Android应用时遇到程序不报错但无法正常运行的问题。问题出现在尝试为按钮添加点击事件监听器时,出现了NullPointerException。错误日志显示,尝试调用null对象的setOnClickListener方法,表明应用中某个按钮未正确初始化。解决方案可能涉及检查布局文件中按钮的引用和实例化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天早上下午一直在处理这个问题——程序不报错但是无法运行。将主要的业务代码注释后,能显示第一个界面,但取消注释后运行会弹出“停止运行”的框,令我疑惑的是前两个星期都没有任何问题,完全能够运行,请各位指点。


package com.example.store;


import android.support.v7.app.ActionBarActivity;
import com.example.store.R;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;




public class MainActivity extends ActionBarActivity {


Button button1,button2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        
    super.onCreate(savedInstanceState);
        
        //刚开始显示第一个界面
        setContentView(R.layout.activity_main);
        
      //这部分是需要补充更改的部分(需要实现登陆时遇到的一切问题,并且将已经登陆过账号的存在本地)
        button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub

//找到可能需要保存其内容的文本输入框,同样也是需要判断是否填写内容的文本输入框
EditText edittext1 = (EditText)findViewById(R.id.edittext1);
EditText edittext2 = (EditText)findViewById(R.id.edittext2);

//以下是输入信息不完整的情况
if(edittext1.getText().toString().length() == 0 && edittext2.getText().toString().length() != 0)
Toast.makeText(MainActivity.this, "请输入账号!", Toast.LENGTH_LONG).show();
if(edittext2.getText().toString().length() == 0 && edittext1.getText().toString().length() != 0)
Toast.makeText(MainActivity.this,  "请输入密码!", Toast.LENGTH_LONG).show();
if(edittext1.getText().toString().length() == 0 && edittext2.getText().toString().length() == 0)
Toast.makeText(MainActivity.this,  "请填写完整登陆信息!", Toast.LENGTH_LONG).show();
}

C# 中的 `BeginInvoke` 是用于异步调用委托的方法,通常用于处理 UI 线程之外的任务,避免阻塞用户界面。如果使用 `BeginInvoke` 后程序报错无法正常运行,可能是以下几个原因: 1. **委托未初始化**:确保你在调用之前已经正确地设置了委托,并且引用了正确的事件处理器。 ```csharp private delegate void MyDelegate(string message); MyDelegate myMethod = new MyDelegate(MyMethodToExecute); // 确保这里有一个实现了 MyDelegate 的方法 void MyMethodToExecute(string message) { // 这里是实际的业务逻辑 } button.Invoke(myMethod, "Hello from another thread"); ``` 2. **线程上下文错误**:如果试图在一个是 UI 主线程的线程上调用 UI 控件的方法,你需要确保它能在正确的地方运行。你可以使用 `Control.InvokeRequired` 检查并强制执行 UI 更新。 ```csharp if (button.InvokeRequired) { button.Invoke(new Action(() => button.Text = "New text")); } else { button.Text = "New text"; // 直接在UI线程上操作 } ``` 3. **回调完成延迟**:`BeginInvoke` 返回的是一个 `IAsyncResult` 对象,你需要通过 `EndInvoke` 或设置回调来获取结果。如果没有正确处理结果,可能会导致程序看起来像是停滞在那里。 4. **并发问题**:确保在多线程环境中会因为并发访问造成意外的结果,特别是在修改共享状态时。 如果遇到这类问题,可以检查上述方面,或者提供更具体的代码片段以便进一步分析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值