黑莓应用程序无法在模拟器中打开

时间:2012-02-15 03:49:40

标签: java multithreading blackberry httpconnection

大家。我是新来的,这是我的第一篇文章。 我正在创建一个简单的应用程序,它可以获取Web的内容。下面是我的代码。问题是,我无法在模拟器上运行它。没有错误,没有对话框,只是完全无法打开。如果有人可以帮助我......

import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.MainScreen;
public class HTTPClient extends UiApplication {
LabelField test;

MainScreen screen = new MainScreen();

public static void main(String[] args)
{
HTTPClient theApp = new HTTPClient();
theApp.enterEventDispatcher();
}

public HTTPClient()
{
getPage("http://google.com");
}

public void getPage(String url) {
String response = "";
try {
StreamConnection s = (StreamConnection)Connector.open(url);
InputStream input = s.openInputStream();
byte[] data = new byte[256];
int len = 0;
StringBuffer raw = new StringBuffer();
while( -1 != (len = input.read(data))) {
raw.append(new String(data, 0, len));
}
response = raw.toString();
show(response);

input.close();
s.close();
} catch(Exception e) { }
}

public void show(String response) {
test = new LabelField(response);
screen.add(test);
pushScreen(screen);
}
}

3 个答案:

答案 0 :(得分:1)

关于您发布的代码的两个注释:

  1. 网络操作(更确切地说,我会说所有非UI操作)应该在一个单独的工作线程中完成,而不是在主事件线程中(UIApplication的情况下的UI线程)。
  2. 如果您需要从UI线程外部访问UI,则可以使用Application的{​​{1}}或invokeLater()方法。或者,工作线程可以在事件锁定上同步(由invokeAndWait()返回)以确保对UI的序列化访问。请注意,您应该只在短时间内保持此锁定。
  3. BlackBerry模拟器和HTTP - 为了测试与BlackBerry模拟器使用HTTP连接的BlackBerry应用程序,必须使用BlackBerry MDS(移动数据系统)连接服务。 Here是指向相关指南的链接。

      

    启动BlackBerry Smartphone Simulator时启动BlackBerry MDS Connection Service

         
        
    1. 在Eclipse®的“运行”菜单上,单击“调试配置”或“运行配置”。
    2.   
    3. 展开BlackBerry Simulator项目。
    4.   
    5. 完成以下任务之一:
        
          
      • 要使用现有的启动配置,请在BlackBerry Simulator下单击启动配置。
      •   
      • 要创建新的启动配置,请右键单击BlackBerry Simulator,然后选择新建。
      •   
    6.   
    7. 单击“模拟器”选项卡。
    8.   
    9. 单击“常规”选项卡。
    10.   
    11. 选中使用模拟器启动移动数据系统连接服务(MDS-CS)复选框。
    12.   
    13. 点击“应用”。
    14.   

    我还强烈建议您检查已下载的JRE附带的HTTPDemo示例(如果能够编译代码,则至少安装了一个JRE)。 Here是如何将这些示例导入Eclipse插件的指南。

    至于你的代码,我修改了它以满足我提到的要求:

    Application.getEventLock()

答案 1 :(得分:0)

您好,只需添加网络扩展程序,即可获得回复

假设您要在设计中运行应用程序,可以将网络扩展名添加为";deviceside=true"

表示在您的代码中更改

StreamConnection s = (StreamConnection)Connector.open(url+;deviceside=true);

然后你可以看到回复

有关更多网络扩展的概念,请验证以下链接

https://stackoverflow.com/a/8515091/914111

答案 2 :(得分:0)

如果图标在那里,可能是应用程序的.cod已部署在模拟器中。我会更改您的应用程序以在窗口中显示静态标签;那会让你知道应用程序实际上正在运行。

一般来说,BB的模拟器中的网络可能很麻烦。我倾向于自己避免它。您可能必须运行'MDS模拟器'。