J2ME 技术的学习与实践者

2008年3月15日 #

[导入]Nokia 6070 报表问题解决


网站: JavaEye  作者: iwinyeah  链接:http://iwinyeah.javaeye.com/blog/172237  发表时间: 2008年03月15日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

经过多次的尝试,终于解决了手机理财JAccount在Nokia 6070反复统计收支表和余额表时出错的问题.
原来我有两个报表上分别使用了incomeVector 和balanceVector来保存所生成的统计资料,每次统计前检查Vector是否为null,否则先置空,再重新new一个.
我尝试过new之后加了runtime.gc(),未能解决问题;
我又尝试过不置空Vector,而使用vector.removeallelements(),也不行;
我又尝试过两个报表共用一个Vector也不行;

最后,我使用两个报表共用数组来保存结果,才解决了问题,有点开心.
类似Nokia6070这种机器的JVM的内存管理的确存在很大的问题,明明有内存也用不得,真郁闷!
不过还是有点开心,毕竟解决了一个问题!
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




文章来源:http://iwinyeah.javaeye.com/blog/172237

posted @ 2008-03-15 21:43 iwinyeah 阅读(20) | 评论 (0)编辑 收藏

[导入]我在J2ME中用过的几种后台线程方法(如何选择?)


网站: JavaEye  作者: iwinyeah  链接:http://iwinyeah.javaeye.com/blog/172200  发表时间: 2008年03月15日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

我以前在其他地方发过的贴子,这几种方式都没问题,哪种较好或者说在什么情况下用哪种方法较好呢?
// 方法一
public class firstManager implements Runnable {
  public void runTask() {
   (new Thread(this)).start();
  }
  public void run() {
   System.out.println("\nfirst thread method!");
   // Do some thing ...
  }
}
// 方法二
public class secondManager {
  private BackTask backTask;
  private Timer timer;
  public secondManager() {
   backTask = new BackTask();
   timer = new Timer();
  }
  public void runTask() {
   timer.schedule(backTask, 0);
  }
  private class BackTask extends TimerTask {
   public void run() {
    System.out.println("\nsecond thread method!");
    // Do some thing ...
   }
  }
}
// 方法三
public class thirdManager {
  private BackTask backTask;
  private int cmd = 0;
  public thirdManager() {
   backTask = new BackTask();
   backTask.start();
  }
  public void runTask() {
   synchronized (backTask) {
    cmd = 1;
    backTask.notify();
   }
  }
  private class BackTask extends Thread {
   public void run() {
    while (true) {
     try {
      if (cmd == 0) {
       synchronized (this) {
        wait();
       }
       continue;
      }
      System.out.println("\nthird thread method!");
      // Do some thing ...
     } catch (Exception e) {
     }
     cmd = 0;
    }
   }
  }
}

// 用例
public void main(){
  firstManager man1 = new firstManager();
  secondManager man2 = new secondManager();
  thirdManager man3 = new thirdManager();
  man1.runTask();
  man2.runTask();
  man3.runTask();
}

本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




文章来源:http://iwinyeah.javaeye.com/blog/172200

posted @ 2008-03-15 17:47 iwinyeah 阅读(38) | 评论 (0)编辑 收藏