将变量传递给方法(Java)

时间:2012-01-13 07:55:55

标签: java android variables methods

我是Java的新手,我遇到了问题。我已经从Android的教程中复制了一些代码,现在我想将一个整数变量传递给方法run(),所以我可以为每个循环增加它,然后在后台Thread之外捕获它。我该怎么做?

int gg= 0;    
Thread background = new Thread(new Runnable() {
                    public void run() {
                        try {

                            while (pBarDialog.getProgress() <= 100) {

                                Thread.sleep(100);
                                gg++; // the increment here
                                progressHandler.sendMessage(progressHandler
                                        .obtainMessage());


                            }
                            if (pBarDialog.getProgress() == 100) {
                                pBarDialog.dismiss();

                            }

                        } catch (java.lang.InterruptedException e) {
                            // if something fails do something smart
                        }
                    }

                });
          //catch gg here

4 个答案:

答案 0 :(得分:3)

您不能为run()方法指定参数。您可以将int变量声明为field并在内部类中使用它。

public class TestActivity extends Activity
{
   private volatile int no;
   .....

}

编辑:(来自@alf的建议)您可以在字段中使用volatile modifier,因此所有其他线程都可以立即看到更改后的值。

答案 1 :(得分:1)

拥有自己的类并使用其构造函数传递计数器,我还没有尝试过,但我会从这样的事情开始:

class MyThread implements Runnable {

   private volatile int counter;

   public MyThread( int counter ) {
       this.counter = counter;
   }

   public void run() {
   ...
   }

   public getCounter() {
      return counter;
   }
}

MyThread mt = new MyThread( 10 );
Thread t = new Thread( mt );
t.start();

// after some time
t.getCounter();

答案 2 :(得分:0)

private volatile int gg;

public void myMethod() {
    Thread background = new Thread(new Runnable() {

        @Override
        public void run() {
            try {
                while (pBarDialog.getProgress() <= 100) {
                    Thread.sleep(100);
                    gg++; // the increment here
                    progressHandler.sendMessage(progressHandler.obtainMessage());
                }
                if (pBarDialog.getProgress() == 100) {
                    pBarDialog.dismiss();
                }
            } catch (java.lang.InterruptedException e) {
                // if something fails do something smart
            }
        }

    });

    System.out.println(gg);
}

答案 3 :(得分:0)

如果我是你,我会调查AtomicInteger,即incrementAndGet()方法。

使gg字段确实会将访问提供给gg,而volatile会使更改可见,但由于你的意图不明确,我不能确定你没有其他线程增加相同的值:你没有原子性,所以只要你有多个线程做gg++,您可能会得到错误的结果。