【发布时间】:2011-01-11 20:32:23
【问题描述】:
我编写了一个访问 Web 服务以检索值的 JavaME 程序,该 Web 服务在 tomcat 服务器上运行。
我遇到了一个非常奇怪的问题,每当我运行程序时,程序都会像我预期的那样下载新值,但它并没有将它们添加到一个未初始化的数组中,而是存储了以前的数组值并添加它们。也许代码会更好地解释它。
我首先创建一个字符串数组来存储检索到的值和一个小的 int 值以在循环它们时使用,我还为服务和存根创建存储:
public class StockQuery extends MIDlet implements CommandListener
{
String[] newResults = null;
int i = 0;
String stockSym = null;
getDataService service = null;
.....
midlet 然后在 startApp() 方法运行时调用一个表单,这允许在文本框中输入一个值,然后按发送命令将值发送到服务器,该服务器将发送回一个值数组(准确地说是 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 个值,然后打印了刚刚下载的额外 18 个值。我已经关闭了我的 IDE,重新启动了我的 PC 并删除了 Netbeans 缓存文件夹,由于某种原因,它总是将值存储在字符串数组和循环值中,即使我在程序启动时将其声明为 0。
我现在是第 15 次运行程序,程序输出是:
Data 267 - 34092040
Data 268 - 22.73 - 31.58
Data 269 - NasdaqNM
Data 270 - 1.95
谁能解释为什么变量没有被清除?
【问题讨论】:
-
您是否在使用 Blackberry 时或在使用 Wireless Toolkit 模拟器进行测试时看到此问题?如果是,那么当 JVM 在 MIDlet 启动之间持续运行时,这可能是已知的变态,导致静态变量保持先前的值,这让应用程序开发人员感到惊讶。此处讨论了一个示例:static variables keep values from previous launch
标签: java java-me wsdl jax-ws midp