Попытка создать встроенную веб-страницу на черной ягоде и не может установить начальный URL - PullRequest
0 голосов
/ 09 июня 2011

Я пытаюсь создать встроенную веб-страницу в своем приложении blackberry, и у меня возникают проблемы при настройке начального URL.

Я могу установить URL только тогда, когда я делаю это из обратного вызова с TextField. Когда я пытаюсь сделать это после того, как я нажимаю на новый экран, приложение больше не работает (оно ничего не делает, когда вы пытаетесь запустить его.

Код, который работает, следующий:

protected boolean keyChar(char key, int status, int time) 
{
    if ( key == Characters.ENTER ) 
    {
        Application.getApplication().invokeLater( new Runnable() 
            {
                public void run() {                     
                    //progressBar.reset("", 0, 100, 0);
                    browserField.requestContent(locationBar.getText().trim());
                } 
            });
        return true;
    } 
    return super.keyChar(key, status, time);
}

Когда я пытаюсь установить его автоматически после того, как все создано, при запуске приложения ничего не происходит.

Фрагмент кода

public MyApp() 
{
    pushScreen(new BrowserFieldScreen());

    // if I have this here, the app will not open
    Application.getApplication().invokeLater( new Runnable() 
        {
            public void run() {                     
                gBrowserField.requestContent("http://google.com");
            } 
    });
}

Полная программа:

package mypackage;

import java.util.Enumeration;
import java.util.Hashtable;

import net.rim.device.api.browser.field.ContentReadEvent;
import net.rim.device.api.browser.field2.BrowserField;
import net.rim.device.api.browser.field2.BrowserFieldListener;
import net.rim.device.api.system.Application;
import net.rim.device.api.system.Characters;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.GaugeField;
import net.rim.device.api.ui.component.TextField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.ui.decor.BackgroundFactory;

import org.w3c.dom.Document;  

/**
 * BrowserField2ProgressTracker
 * - A BrowserField2 Mini-browser application that keeps track of page-loading progress
 *   and displays progress information to the user.
 */

public class MyApp extends UiApplication {


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

    public MyApp() {
        pushScreen(new BrowserFieldScreen());
    /*  
        if I have this hear, the ap will not open
        Application.getApplication().invokeLater( new Runnable() {
            public void run() {                     
                gBrowserField.requestContent("http://google.com");
            } 
        });
    }
    */
}

/**
 * BrowserFieldScreen
 * - A screen that contains a location bar, a progress bar, and a browser field
 */
class BrowserFieldScreen extends MainScreen {

    // The location bar where URL will be typed in
    private TextField locationBar;  


    // The BrowserField 
    private BrowserField browserField;


    public BrowserFieldScreen() {
//      progressTracker = new BrowserFieldLoadProgressTracker(10f);
        createGUI();


    }

    private void createGUI() {

        VerticalFieldManager mainManager = new VerticalFieldManager(Field.USE_ALL_WIDTH | Field.USE_ALL_HEIGHT | Manager.VERTICAL_SCROLLBAR | Manager.HORIZONTAL_SCROLLBAR );

        locationBar = new TextField() {

            protected boolean keyChar(char key, int status, int time) {
                if ( key == Characters.ENTER ) {
                    Application.getApplication().invokeLater( new Runnable() {
                        public void run() {                     
                            //progressBar.reset("", 0, 100, 0);
                            browserField.requestContent(locationBar.getText().trim());
                        } 
                    });
                    return true;
                } 
                return super.keyChar(key, status, time);
            } 
        };

        locationBar.setBackground(BackgroundFactory.createSolidBackground(Color.BEIGE));
        locationBar.setText("http://google.com");
        browserField = new BrowserField();

        MyApp.gBrowserField=browserField;
        mainManager.add(locationBar);
        mainManager.add(browserField);
        add(mainManager);   
    } 
}

1 Ответ

0 голосов
/ 09 июня 2011

Не думаю, что вы можете звонить invokeLater() до тех пор, пока ваше приложение theApp не войдет в основную ветку событий.Что можно сделать, вызвав theApp.enterEventDispatcher()

, вместо этого попробуйте изменить конструктор BrowserFieldScreen на:

public BrowserFieldScreen() {
    //      progressTracker = new BrowserFieldLoadProgressTracker(10f);
    createGUI();
    browserField.requestContent("http://google.com");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...