2011-01-11 23 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方法中。它可能使用本地設備持久性來存儲以前的服務器數據。請看看它。