java-me - 告诉我这段代码会发生什么?

标签 java-me midp

我正在尝试了解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();

请告诉我pbThread构造函数中做什么。如果将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

最佳答案

如果您的代码可以编译,则pbThread构造函数的参数。

假定它是一个单个参数,它可以是RunnableString,因为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/

相关文章:

java - Java中使用FFT算法进行音频频谱分析

java - 在文本字段中设置多个约束

java - 填充矩形 - 绘画方法 (MIDP)

java - 如何杀死等待Java中阻塞函数调用的线程?

java - 发生 RecordStoreFullException 时奇怪的 RecordStore 行为

java-me - 如何在 LWUIT 中创建自定义日历?

java - getResourceStream 写入文件

java-me - Java ME 中是否提供所有 Java SE 类?

java - j2me中如何监听textfield或textbox中值的变化?

java - MIDP:获取或跟踪当前聚焦的项目