我正在尝试了解J2ME代码
Thread aaa = new Thread(pb) { private final ProgressBar val$pb;
public void run() { while (this.val$pb.getValue() < 100) {
try {
this.val$pb.setValue(this.val$pb.getValue() + 1);
Thread.sleep(10L); } catch (InterruptedException ex) {
}
this.val$pb.repaint();
}
mainForm.homeScreen = new HomeScreen();
mainForm.homeScreen.show();
}
};
aaa.start();
请告诉我
pb
在Thread
构造函数中做什么。如果将new Thread(pb)
更改为new Thread()
,此代码将如何显示?它会影响val$pb
吗?上面的代码无法编译,所以我像这样编辑Thread aaa = new Thread() { private final ProgressBar val=null ;//new Thread(pb) ProgressBar val$pb;
public void run() { try {while (this.val.getValue() < 100) { //try added by me
try {
this.val.setValue(this.val.getValue() + 1);
Thread.sleep(10L); } catch (InterruptedException ex) {
}
this.val.repaint(); //draws progress bar as a loading screen before showing home screen
}
}catch(Exception e){
mainForm.homeScreen = new HomeScreen();
mainForm.homeScreen.show(); // draws home screen
}
}
};
aaa.start();
编辑:-它使用J4ME library。
最佳答案
如果您的代码可以编译,则pb
是Thread
构造函数的参数。
假定它是一个单个参数,它可以是Runnable或String,因为Java ME API仅在线程构造函数中将这些对象指定为单个参数。
如果将新线程(pb)更改为新线程(),此代码将如何显示?
如果pb是Runnable
,则事情可能不会改变,因为线程实例aaa
覆盖了run方法(否则将为pb调用),并且因为在您的代码段中,没有其他方式调用pb.run
的痕迹(这会散发出设计错误或您的代码段剪切了太多代码)。
如果pb是String
,则线程aaa
的名称将是默认值,而不是pb值。
它会影响val $ pb吗?
除非您发布更多代码-最好以SSCCE形式,否则很难说。val$pb
看起来很有趣,但这可能是变量的合法标识符,假设您在代码片段中剪切了一些初始化它的代码。
在代码的第二个版本中更新,因为您初始化了private final ProgressBar val=null
-结果,在调用该方法的run方法语句中,调用该方法的运行方法语句将抛出NPE this.val.getValue()
并继续进入根据代码注释绘制主屏幕的catch块。
更新2
如果我不初始化private final ProgressBar val
,那么它会给出variable val might not have been initialized
的错误信息,那么初始化它的另一种方式是什么?
好吧,如果您的代码段中的代码数量有限,那么您只能猜测。
想到的一种方法是使用pb
进行初始化,如下所示:
//...
new Thread(pb) { private final ProgressBar val$pb = pb; // ...
如果pb引用ProgressBar实例并声明为final,则以上代码可能会编译。
请注意,在这种情况下,
val$pb
并不是必需的,因为可以使用pb
代替它(也许此变量是为代码样式首选项引入的)。另外,考虑到您对j4me的引用,必须承认在线程构造函数中使用ProgressBar(如果pb是此类的实例)对我来说意义不大。一个人只能想知道它是如何出现在您发布的
Thread aaa = new Thread(pb)...
的原始代码段中的
关于java-me - 告诉我这段代码会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9365106/