1

我想在我的应用程序中有一个标签栏。我在黑莓中尝试了它的示例代码,但我希望它位于屏幕底部。我尝试了此代码,但它给了我未捕获的运行时异常。为什么会这样?这段代码有什么问题?

import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.ui.image.*;
import net.rim.device.api.ui.toolbar.*;
import net.rim.device.api.util.*;
import net.rim.device.api.system.*;
import net.rim.device.api.command.*;

public class ToolbarDemo extends UiApplication
{
    public static void main(String[] args)
    {

        ToolbarDemo theApp = new ToolbarDemo();       
        theApp.enterEventDispatcher();
    }

    public ToolbarDemo()
    {        
        // Push a screen onto the UI stack for rendering.
        pushScreen(new ToolbarDemoScreen());
    }

    private final static class ToolbarDemoScreen extends MainScreen
    {
        public ToolbarDemoScreen()
        {              
            if (ToolbarManager.isToolbarSupported()) 
            {
                setTitle("Toolbar Demo");

                ToolbarManager manager = new ToolbarManager();
                setToolbar(manager);

                try 
                {
                    Bitmap myBitmap = Bitmap.getBitmapResource("myImg.jpg");
                    Image myImage = ImageFactory.createImage(myBitmap);

                    /*
                     * To create more buttons, Repeat the following lines 
                     * up until manager.add() 
                     */
                    ToolbarButtonField button1 = new ToolbarButtonField(myImage, new StringProvider("butn1"));
                    button1.setCommandContext(new Object()
                    {
                        public String toString()
                        {
                            return "Button1"; 
                        }          
                    });

                    button1.setCommand(new Command(new CommandHandler()
                    {         
                        public void execute(ReadOnlyCommandMetadata metadata, Object context)
                        {
                            Dialog.alert("Executing command for " + context.toString());
                        }           
                    }));

                    manager.add(new ToolbarSpacer(0));
                    manager.add(button1);
                }
                catch (Exception e)
                {
                    System.out.println(e.getMessage());
                }
            } 
            else 
            {
                Dialog.alert("The Toolbar is not supported on this device.");
            }
        }     
    }
}
4

2 回答 2

1

如果您收到异常,Uncaught Exception: pushModalScreen called by a non-event thread那么您可以尝试以下代码片段来显示警报。

UiApplication.getUiApplication().invokeLater(new Runnable() {
    public void run() {
        Dialog.alert("The Toolbar is not supported on this device.");
    }
});

请检查这个问题,“非事件线程调用的pushModalScreen”在事件线程上抛出

于 2012-04-16T13:47:16.777 回答
0

试试这个代码

EncodedImage e1 = EncodedImage.getEncodedImageResource("home.png");
EncodedImage e2 = EncodedImage.getEncodedImageResource("map.png");
EncodedImage e3 = EncodedImage.getEncodedImageResource("members.png");
EncodedImage e4 = EncodedImage.getEncodedImageResource("message.png");
EncodedImage e5 = EncodedImage.getEncodedImageResource("settings.png");
EncodedImage e6 = EncodedImage.getEncodedImageResource("logout.png");


HorizontalFieldManager buttonPanel = new HorizontalFieldManager(Field.FIELD_TOP | Field.USE_ALL_WIDTH);

  VerticalFieldManager vfm=new VerticalFieldManager();
  vfm.add(new LabelField("Map"));
  vfm.add(new BitmapField(e2.getBitmap(),FOCUSABLE){
     protected boolean navigationClick(int status, int time){

        Dialog.alert("MAP");
        return true;
       }

  });
  buttonPanel.add(vfm);
  buttonPanel.add(new LabelField("  "));

  VerticalFieldManager vfm1=new VerticalFieldManager();
  vfm1.add(new LabelField("Members"));
  vfm1.add(new BitmapField(e3.getBitmap(),FOCUSABLE){
     protected boolean navigationClick(int status, int time){

        Dialog.alert("Members");
        return true;
       }

  });
  buttonPanel.add(vfm1);

  VerticalFieldManager vfm2=new VerticalFieldManager();
  vfm2.add(new LabelField("Message"));
  vfm2.add(new BitmapField(e4.getBitmap(),FOCUSABLE){
     protected boolean navigationClick(int status, int time){

        Dialog.alert("Message");
        return true;
       }

  });
  buttonPanel.add(vfm2);

  VerticalFieldManager vfm3=new VerticalFieldManager();
  vfm3.add(new LabelField("Settings"));
  vfm3.add(new BitmapField(e5.getBitmap(),FOCUSABLE){
     protected boolean navigationClick(int status, int time){

        Dialog.alert("Settings");
        return true;
       }

  });
  buttonPanel.add(vfm3);

  VerticalFieldManager vfm4=new VerticalFieldManager();
  vfm4.add(new LabelField("Logout"));
  vfm4.add(new BitmapField(e6.getBitmap(),FOCUSABLE){
     protected boolean navigationClick(int status, int time){

        Dialog.alert("Logout");
        return true;
       }

  });
  buttonPanel.add(vfm4);

  setStatus(buttonPanel);
于 2012-04-16T13:28:12.760 回答