首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未识别异常错误: Blackberry 7 Dev

未识别异常错误: Blackberry 7 Dev
EN

Stack Overflow用户
提问于 2014-03-17 09:13:29
回答 2查看 122关注 0票数 0

我不明白我做错了什么,代码看起来不错,我试图为一个GridLayout设置一个背景图像,当我添加背景代码时,我得到一个错误,当我注释掉它时,它在模拟器中运行良好。我做错了什么?

更新

代码语言:javascript
运行
复制
   public class GFMScreen extends MainScreen {

    VerticalFieldManager ver;
    ButtonField submit;
    HorizontalFieldManager hr;
    private int phoneWidth = Display.getWidth();
    private int cellHeight = Display.getHeight();

    public GFMScreen() {
        super(Manager.USE_ALL_WIDTH | Manager.NO_VERTICAL_SCROLL);
        setTitle("Jonezing");
        createGUI();
    }

    public void createGUI() {
        try {
            final Bitmap background = Bitmap.getBitmapResource("bg.png");
            ver = new VerticalFieldManager(Manager.NO_HORIZONTAL_SCROLL
                    | VerticalFieldManager.NO_VERTICAL_SCROLL
                    | Manager.FIELD_VCENTER | USE_ALL_HEIGHT | USE_ALL_WIDTH) {

                public void paint(Graphics g) {
                    Bitmap scaled = new Bitmap(phoneWidth, cellHeight);
                    background.scaleInto(scaled, Bitmap.SCALE_TO_FIT);
                    g.drawBitmap(0, 0, phoneWidth, cellHeight, scaled, 0, 0);
                    super.paint(g);
                }
            };
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // ver.setBackground(BackgroundFactory.createBitmapBackground(Bitmap
        // .getBitmapResource("bg.png")));
        ver = new VerticalFieldManager(Manager.NO_HORIZONTAL_SCROLL
                | VerticalFieldManager.NO_VERTICAL_SCROLL
                | Manager.FIELD_VCENTER | USE_ALL_HEIGHT | USE_ALL_WIDTH);
        GridFieldManager grid = new GridFieldManager(4, 2,
                Manager.FIELD_VCENTER | Manager.NO_VERTICAL_SCROLL);
        grid.add(new BitmapField(Bitmap.getBitmapResource("english.png")));
        grid.add(new BitmapField(Bitmap.getBitmapResource("yoruba.png")));
        grid.add(new LabelField("English", Field.FOCUSABLE));
        grid.add(new LabelField("Yoruba", Field.FOCUSABLE));
        grid.add(new BitmapField(Bitmap.getBitmapResource("mp.png")));
        grid.add(new BitmapField(Bitmap.getBitmapResource("about.png")));
        grid.add(new LabelField("MP3s", Field.FOCUSABLE));
        grid.add(new LabelField("About", Field.FOCUSABLE));
        grid.setPadding(100, 0, 50, 100);
        grid.setColumnPadding(100);
        grid.setRowPadding(10);
        ver.add(grid);
        add(ver);
    }
    }

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-03-17 10:18:28

您的错误可能与非滚动管理器中的GridFieldmanager有关。因此,您将得到一个运行时异常,它不记得是什么,但很可能是一个IllegalStateException。

我曾经尝试过使用GridFieldManager,老实说,我已经放弃了,因为这样的问题。

正如我在另一个问题中所建议的:

blackberry-development-ui

我将停止使用GridFieldManager,转而使用TableLayoutManager。您可以做同样的事情,如果您对TableLayoutManager有任何问题,那么您就有了代码并可以修复它。

如果您真的想要使用GridFieldManager,那么可以找到一个使用它的示例,准确地复制该代码,并一次对它进行修改,直到使它达到所需的状态为止。

另一种可能是,代码无法找到背景图像,在这种情况下,您将在case ()方法中获得一个NullPointerException。因为你的问题描述不太好,我们看不出来。要检查这一点,只需查看以下语句的结果:

代码语言:javascript
运行
复制
final Bitmap background = Bitmap.getBitmapResource("bg.png");

位图背景设置为空或否。如果它不是null,则将找到该图像。如果它为空,那么我们需要寻找另一个解决方案。

最后,我是否可以建议您尽可能少地使用画图()进行处理。在VerticalFieldManager的time ()方法中,实际上每次都缩放位图。现在gets ()被调用了很多,缩放是一项昂贵的操作,所以我建议您重新处理这段代码,以便只缩放一个位图。

对不起,还有一件事-你可能需要小心的图像缩放。您正在缩放一个图像以匹配屏幕的大小-如果该屏幕是景观或肖像怎么办?图像会变得扭曲吗?

更新

我刚刚用这个代码注意到了其他一些事情:

代码语言:javascript
运行
复制
try {
    final Bitmap background = Bitmap.getBitmapResource("bg.png");
    ver = new VerticalFieldManager(Manager.NO_HORIZONTAL_SCROLL
            | VerticalFieldManager.NO_VERTICAL_SCROLL
            | Manager.FIELD_VCENTER | USE_ALL_HEIGHT | USE_ALL_WIDTH) {

        public void paint(Graphics g) {
            Bitmap scaled = new Bitmap(phoneWidth, cellHeight);
            background.scaleInto(scaled, Bitmap.SCALE_TO_FIT);
            g.drawBitmap(0, 0, phoneWidth, cellHeight, scaled, 0, 0);
            super.paint(g);
        }
    };
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

1)在这段代码中,try/catch只是捕捉位图和VFM创建过程中的错误。它不会捕捉paint()方法中的任何错误。我非常怀疑您在位图或VFM的构造中是否有错误。

2) e.printStackTrace();不会产生堆栈跟踪,实际上,在这种情况下,我怀疑它会做任何事情,除非掩盖一个问题。在BB中获取堆栈跟踪的唯一方法是捕获Throwable。您可能需要使用的代码如下所示:

代码语言:javascript
运行
复制
    try {
....
    } catch (Throwable t) {
        t.printStackTrace();
    }
票数 1
EN

Stack Overflow用户

发布于 2014-03-17 09:18:28

使用尝试捕捉块

尝试{

//您的后台代码在这里

}

渔获量(e除外){

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22450392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档