0

メイン画面にブラウザ フィールドを追加しようとしています。現在、私は持っています:

public class BrowserFieldDemo extends UiApplication {

private MainScreen _browserScreen;
private BrowserField _bf2;
private BrowserFieldConfig _bfConfig;

public BrowserFieldDemo(final String url) {
    _browserScreen = new MainScreen();
    _bfConfig = new BrowserFieldConfig();
    _bfConfig.setProperty(BrowserFieldConfig.NAVIGATION_MODE,
            BrowserFieldConfig.NAVIGATION_MODE_POINTER);
    _bfConfig.setProperty(BrowserFieldConfig.JAVASCRIPT_ENABLED,
            Boolean.TRUE);
    _bf2 = new BrowserField(_bfConfig);
    _browserScreen.add(_bf2);

    invokeLater(new Runnable() {
        public void run() {
            _bf2.requestContent(url);
            pushScreen(_browserScreen);
        }
    });
}
}

他のUI要素の中でも、ブラウザをメインスクリーンクラスに挿入する正しい方法は何ですか? たとえば、add(myBrowserField)? スレッドの UIApplication を拡張する必要があるため、これを行うために BrowserFieldDemo クラスをセットアップする方法がわかりません...

public class LoginScreen extends MainScreen implements FieldChangeListener{}

ありがとう!


アップデート:

私は今、次のものを持っています:

public class LoginBrowserField extends Thread {

    private LoginScreen loginScreen;
    private String url;

    public LoginBrowserField(String url, LoginScreen loginScreen) {
        this.loginScreen = loginScreen;
        this.url = url;
    }

    public void run() {
       synchronized (UiApplication.getEventLock()) {
        loginScreen.changeURL(url);
       }
    }
}

public class LoginScreen extends MainScreen implements FieldChangeListener {

     public void changeURL(final String url) {
        _bf2.requestContent(url);
        _bf2.setFocus();
     }

}

ブラウザを起動するには、(LoginScreen で) 次のように呼び出します。

LoginBrowserField browser = new LoginBrowserField(url, this);
browser.start();

ただし、ブラウザがアプリケーションに表示されるまでに非常に長い時間がかかり、URL が正しく解決されないため、上記の設定が正しいかどうかわかりません。何か間違っていることがわかりますか?

ありがとう!

4

1 に答える 1

2

バックグラウンドでコードを実行する (つまり、HTTP 経由でデータをロードする) ための新しいスレッドが必要な場合は、新しい Thread オブジェクトを作成して start() するだけで済みます。このために UiApplication をサブクラス化する必要はありません。

一方、イベント ハンドラー スレッド (pushScreen など) で実行するコードをスケジュールする必要がUiApplication.getUiApplication()ある場合は、UiApplication のインスタンスを取得するために使用できます。次に例を示します。

UiApplication.getUiApplication().invokeLater(new Runnable() {
    public void run() {
        pushScreen(_browserScreen);
    }
});
于 2010-01-26T23:13:03.697 に答える