【问题标题】:Uncaught Exception Error: Blackberry 7 Dev未捕获的异常错误:Blackberry 7 Dev
【发布时间】:2023-03-06 04:40:01
【问题描述】:

我不明白我做错了什么,代码似乎没问题,我正在尝试为 GridLayout 设置背景图像,当我添加背景代码时,我得到一个错误,当我评论它时出来,它在模拟器中运行良好..我做错了什么?

更新

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

谢谢。

【问题讨论】:

  • 如果您更多地分析您的问题并提供更多信息,您会做得更好。例如,这不是问题描述“当我添加后台代码时出现错误,当我将其注释掉时,它运行良好”。错误是什么?也就是说 - 请参阅下面的答案。

标签: blackberry java-me blackberry-simulator


【解决方案1】:

您的错误可能与需要在非滚动管理器中的 GridFieldmanager 有关。所以你会得到一个运行时异常,不记得它是什么,但很可能是一个 IllegalStateException。

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

正如我在您的其他问题中所建议的那样:

blackberry-development-ui

我会停止使用 GridFieldManager 并改用 TableLayoutManager。你可以做同样的事情,如果你对 TableLayoutManager 有任何问题,你有代码并且可以修复它。

如果您真的想使用 GridFieldManager,那么请找到一个可以使用的示例,准确地复制该代码,然后一次一点地更改它,直到您将其变为您想要的状态。

另一种可能是代码找不到背景图像,在这种情况下,您会在 paint() 方法中得到 NullPointerException。因为你的问题描述的不是很好,我们无法判断。要检查这一点,只需查看此语句的结果:

final Bitmap background = Bitmap.getBitmapResource("bg.png");

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

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

抱歉,还有一件事 - 您可能需要小心图像缩放。您正在缩放图像以匹配屏幕的大小 - 如果该屏幕是横向或纵向的怎么办?图像会变形吗?

更新

我刚刚注意到这段代码的其他一些事情:

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 java 中获取堆栈跟踪的唯一方法是捕获 Throwable。您可能想要使用的代码如下所示:

    try {
....
    } catch (Throwable t) {
        t.printStackTrace();
    }

【讨论】:

  • 谢谢,我看到了你对我之前的 Q 的回答,但是到那时我已经看到了 GriedField 的代码,它只是背景的东西。我会检查表格布局,这似乎是有点复杂。请检查更新的代码。
  • 对不起..它在模拟器上给出的错误是:App Error 103, Uncaught IllegalArgumentException
  • 在哪一行?请更新您的问题描述。
  • 谢谢彼得,我可以使用 Background bg = BackgroundFactory.createBitmapBackground(Bitmap.getBitmapResource("background.png")); ver.setBackground(bg);
  • 好的,你能把自己的答案写进去并标记为解决方案吗?
【解决方案2】:

使用 try catch 块

试试{
//你的后台代码在这里

}

捕获(异常 e){

}

【讨论】:

  • 应用程序运行良好,但没有显示背景.. itz white
  • 如果“bg.png”与你的.java文件在同一个文件夹中,那么给定的路径就可以了,否则你需要提到背景图像的正确路径。
  • bg.png 与上面的代码中的其他 PNG(engish、yoruba、about 和 mp)一起位于 res 文件夹中,我将尝试将其与 java 文件放在同一文件夹中.
  • 我已将 bg.png 与 java 文件放在同一个文件夹中,似乎它在我的代码中。我将更新我上面的帖子,以便您帮助检查。谢谢。
  • 在 graphics.drawBitmap() 中使用您创建的“最终位图背景”。我认为这将解决问题。
猜你喜欢
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多