2011-01-11 19 views
3

我已经编写了一个访问Web服务以检索值的JavaME程序,该Web服务在一个Tomcat服务器上运行。JavaME MIDlet不会清除变量?

我面临着一个非常奇怪的问题,每当我运行程序时,程序会像我预期的那样下载新的值,但不是将它们添加到单元化数组中,而是似乎存储之前的数组值并添加它们。也许代码会更好地解释它。

我首先创建一个字符串数组来存储检索到的值和一个小的整数值通过它们循环时使用,我还创建用于服务和存根存储:

public class StockQuery extends MIDlet implements CommandListener 
{ 
    String[] newResults = null; 
    int i = 0; 
    String stockSym = null; 
    getDataService service = null; 
    ..... 

该MIDlet然后调用一个形式当startApp()方法运行并且这允许将输入值输入到文本框中,然后按下send命令将该值发送到服务器时,该服务器将发回一个值的数组(精确地为18)。为了实现这个,我接着调用commandAction()方法。

public void commandAction(Command c, Displayable d) 
{ 
    else if(c == cmdSend) 
    { 
     stockSym = getSym.getString(); 
     service = new getDataService_Stub(); 
     try 
     { 
      newResults = service.getStock(stockSym); 
      for(i=0; i<newResults.length; i++) 
      { 
       System.out.println("Data " + i + " - " + newResults[i]); 
      } 
     } 
     catch (RemoteException ex) 
     { 
      ex.printStackTrace(); 
     } 

现在程序应该下载并将18个值放入字符串数组和循环中。它这样做,但它不会从数组中刷新以前的值,因为我不能完全弄清楚。

例如,我第一次执行循环时,程序确实循环并打印了18个值,但是第二次打印了上一次运行的初始值,然后是刚下载的额外18个值。我已经关闭了我的IDE,重新启动了我的电脑并删除了Netbeans缓存文件夹,出于某种原因,它将始终将值存储在字符串数组和循环值中,即使我在程序启动时将其声明为0。

我现在对我的程序运行15日和程序输出是:

Data 267 - 34092040 
Data 268 - 22.73 - 31.58 
Data 269 - NasdaqNM 
Data 270 - 1.95 

任何人都可以解释为什么变量没有被清除?

+1

您是否看到黑莓的这个问题,或者在使用Wireless Toolkit仿真器进行测试时?如果是的话,那么当JVM在MIDlet启动之间保持运行时,这可能是已知的变态,从而导致静态变量保持先前的值,使应用程序开发人员感到意外。一个例子在这里讨论:[静态变量保持先前启动的值](http://stackoverflow.com/questions/5258818/static-variables-keep-values-from-previous-launch/8148734#8148734) – gnat 2012-07-19 18:51:11

回答

0

这个问题似乎在getDataService_Stub.getStock方法中。它可能使用本地设备持久性来存储以前的服务器数据。请看看它。