我正在寻找一种从后台线程在ListField上显示图像的方法。首先在我的drawListRow中尝试这个
path = (String) imagePaths.elementAt(index);
bit = connectServerForImage(path);
g.drawBitmap(xText, y + yText, 80, 200, bit, 0, 0);
但无法在整个列表中顺畅滚动,they表示不在UI上进行网络或其他阻止操作。但我也试试这个
private class imgConnection extends Thread
{
public imgConnection() {
super();
}
public void run() {
try {
for (int i = 0; i < imagePaths.size(); i++)
{
final int index = i;
String path = imagePaths.elementAt(index).toString();
bit = connectServerForImage(path);
image.addElement(bit);
}
}
catch (Exception e)
{
System.out.println(e.toString());
}
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
_list.setSize(image.size());
subManager.add(_list);
screen.invalidate();
}
});
}
}
public void drawListRow(ListField list, Graphics g, int index, int y, int w) {
bit = (Bitmap) image.elementAt(index);
g.drawBitmap(xText, y + yText, 80, 200, bit, 0, 0);
}
但没有任何反应。任何想法,评论。
你是对的,我刚开始java开发2周前特别是BB开发,我试试这个link。我想从json return获取路径url后添加后台线程来下载图像。
第一个帖子:
_connectionthread = new Connection();
_connectionthread.start();
private class Connection extends Thread
{
public Connection()
{
super();
}
public void run() {
try {}
catch (Exception e) {}
}
}
第二个帖子:
_imgConnectionThread = new ImgConnection();
_imgConnectionThread.start();
private class ImgConnection extends Thread
{
public ImgConnection() {
super();
}
public void run() {
try {
}
catch (Exception e)
{
}
}
}
如何在ListField上更新图像?
答案 0 :(得分:2)
答案基于 - pastebin.com/90UKTHzP
的代码糟糕的代码!它真的很难读懂而且难以理解!看起来您从不同位置复制粘贴的几个示例。您也可以使用相同的行为覆盖默认行为。 MainScreen也已经有了VerticalManagerField。此外,您每次迭代都会向管理器添加列表,这将导致IAE。主要的一个线程取决于第二个的结果。它们同时启动,但是从服务器获取json并且它的处理可能需要更长的时间,因此图像线程最有可能完成其运行而没有任何结果。
所以修复它的主要建议 - 阅读clean code book!阅读有关java development - 约定,多线程的更多信息。阅读BB development - UI api,网络。
最后 - 只启动一个线程来获取和解析json。完成后 - 启动另一个线程来获取图像。
还有一些小的东西可以节省更多的电池和处理器时间 - 开始按需加载图像 - 当它绘制或将要绘制时(用户滚动列表)。
答案 1 :(得分:1)
按照惯例,Java类名称以大写字母开头,因此imgConnection应该是ImgConnection。
在您的示例代码中,我没有看到imgConnection在任何地方被实例化,并且我没有看到对Thread.start()的任何调用,这是我开始的线程的方式。没有Thread.start()就不会发生任何事情 - 线程永远不会启动。