2012-02-15 9 views
1

皆さん。私はここに新しいです、これは私の最初の投稿です。 私はウェブのコンテンツを取る簡単なアプリケーションを作成しています。以下は私のコードです。問題は、シミュレータでこれを実行することができないということです。エラーもダイアログボックスもなく、完全に開くことはできません。私を助けることができる誰でも....ブラックベリーアプリケーションはシミュレータで開くことができません

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); 
} 
} 
+0

ルック:あなたのコードについては

は、私が言及した要件を満たすためにそれを修正しましたBBシミュレータ上で – mrvincenzo

+0

BBシミュレータの「イベントログ」(BBシミュレータ - >ツール - >イベントログの表示)で「例外」を探すこともできます。 – mrvincenzo

+0

@ error.exit例外です。java.io.InterruptedIOException:〜12000の後にローカル接続がタイムアウトしました – blazaphyrocqua

答えて

1

2つのノート:

  1. 操作をネットワークは、(より正確には、私はすべての非UI操作と言うでしょう)のメインイベントスレッドに個別のワーカースレッドではなく実行する必要があります(UIスレッドの場合UIApplication)。
  2. UIスレッドの外部からUIにアクセスする必要がある場合は、ApplicationinvokeLater()またはinvokeAndWait()のメソッドを使用できます。また、ワーカースレッドは、イベントロック(Application.getEventLock()によって返される)を同期させて、UIへのシリアライズされたアクセスを保証することもできます。このロックは短時間だけ保持するようにしてください。

BlackBerryシミュレータとHTTPについて - BlackBerryシミュレータでHTTP接続を使用するBlackBerryアプリケーションをテストするには、BlackBerry MDS(モバイルデータシステム)接続サービスを使用する必要があります。 Hereは、関連ガイドへのリンクです。

スタートBlackBerry MDS Connection Serviceは、あなたがEclipse(登録商標)でのBlackBerry Smartphone Simulatorの

  1. を起動したときに、ファイル名を指定して実行]メニューの[デバッグコンフィギュレーションまたは実行構成]をクリックします。
  2. BlackBerry Simulatorアイテムを展開します。
  3. 次のタスクのいずれかを行います。既存の起動設定で動作するように
    • 、BlackBerryのシミュレータの下で、起動設定をクリックします。
    • 新しい起動設定を作成するには、BlackBerry Simulatorを右クリックし、[新規]を選択します。
  4. [シミュレータ]タブをクリックします。
  5. [全般]タブをクリックします。
  6. [シミュレータ付きモバイルデータシステム接続サービス(MDS-CS)の起動]チェックボックスをオンにします。
  7. [適用]をクリックします。

私も非常にあなたがダウンロードしたのJREが付属していますHTTPDemoサンプルをチェックするためにあなたにお勧めします(あなたのコードをコンパイルすることができれば、あなたは、少なくとも一つのJREをインストールしています)。 Hereは、これらのサンプルをEclipseプラグインにインポートする方法のガイドです。あなたがアプリケーションを実行すると、Eclipseの「コンソール」ビューに表示される出力でException` `ため

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 { 
    private LabelField labelField; 

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

    public HTTPClient() { 
     MainScreen httpScreen = new MainScreen(); 
     labelField = new LabelField(); 
     httpScreen.add(labelField); 
     pushScreen(httpScreen); 

     new Thread() { 
      public void run() { 
       getPage("http://google.com"); 
      } 
     }.start(); 
    } 

    public void getPage(String url) { 
     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)); 
      } 
      input.close(); 
      s.close(); 

      show(raw.toString()); 

     } catch (Exception e) { 
     } 
    } 

    public void show(final String response) { 
     Thread t = new Thread() { 
      public void run() { 
       labelField.setText(response); 
      } 
     }; 
     UiApplication.getUiApplication().invokeLater(t); 
    } 
} 
0

がある場合こんにちはあなただけのネットワーク拡張を追加し、あなたが応答を取得することができます

は、あなたが工夫でアプリケーションを実行したいか、あなたのようにネットワーク拡張を追加することができたとし

";deviceside=true"は、あなたが応答を見ることができるだけで

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

を変更するコードの中で意味

複数のネットワーク拡張のコンセプトについて

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

+0

しかし、私はまだシミュレータ上で実行することはできません。私はアプリケーションを起動することさえできません。アイコンをクリックすると、何も表示されません。 – blazaphyrocqua

+0

例外が発生するため、アプリケーションが開始されません。ブレークポイントを与えるコードをデバッグしてください。例外を見つけるのに役立ちます。 –

0

次のリンクをご確認くださいアイコンがある場合は、それはおそらくアプリの.codがシミュレータに配備持っています。ウィンドウに静的ラベルを表示するようにアプリを変更します。アプリが実際に動作していることを知らせます

一般に、BBのシミュレータでのネットワーキングは面倒なことがあります。私はそれを自分で避ける傾向があります。 'MDSシミュレータ'を実行する必要があります。あなたが投稿したコードに関する

+0

まあ正直なところ、私が話していることは本当に分かりません。私はプログラミングでは新しいので、私を案内してくれますか?ありがとうございました – blazaphyrocqua

+0

私は、ネットワークと、私がBBシミュレータ(9000と9800)を扱っている時間を含むアプリケーションに取り組んでいます。まれに、ネットワーキングやBBシミュレータに関する問題が発生します。 – mrvincenzo

関連する問題