我有另一个类,需要在执行过程时在我的UI中更新进度条。 我尝试了两种方法,都将我的ProgressBar变量设置为null,所以我最终一直得到NullPointerException:
方法1)
MyClass tmp = new MyClass();
tmp.setProgressBar(myprg); // myprg is ProgressBar variable and already have value from findViewById function
然后在MyClass中:
public void SetProgressBar(ProgressBar prg)
{
localprg = prg; // I put breakpoint here, it's null after assignment
}
方法2)
MyClass tmp = new MyClass(container.getContext());
tmp.findProgressBar();
MyClass中的:
public class void findProgressBar()
{
localprg = (ProgressBar) ((Activity)c).findViewById(R.id.progress_bar);
}
两者都失败了,两者都使localprg = null。
答案 0 :(得分:0)
Pass object by reference in Java
看起来,您希望在运行时流畅地增加进度条。您的类属性似乎会关注计算值,该值用于指示进度条的进度。 这不是正确的方法。
a)您通过将父对象传递给子属性来创建交叉引用。这不是一种好的做法,并且会产生强烈的耦合。
b)重度计算应该在一个自己的工作线程(非ui线程)中运行,然后通知它 ui线程通过事件与事件参数。然后,事件订阅者可以决定如何对此作出反应 事件。您可以将其视为“java事件处理”或“java观察者模式”。c)线程?一个自己的大话题。