告诉我这段代码会发生什么



我正在尝试理解 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 库。

如果你的代码编译,那么pb是构造函数Thread参数。

鉴于它是单个参数,它可能是可运行的或字符串的,因为Java ME API在线程构造函数中仅将这些对象指定为单个参数。

如果我将新线程(

pb(更改为新线程((,此代码将是什么样子?

如果 pb Runnable那么事情可能不会改变,因为 Thread 实例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 引用进度条实例并被声明为 final,则上面的内容可能会编译。

请注意,在这种情况下,val$pb不是很必要,因为可以使用pb代替它(也许此变量是为代码样式首选项引入的(。

另外,鉴于您对j4me的引用,不得不承认在线程构造函数中使用ProgressBar-如果pb是此类的实例-对我来说意义不大。人们只能想知道它是如何出现在您发布的初始片段中的Thread aaa = new Thread(pb)...

相关内容

  • 没有找到相关文章

最新更新