gpt4 book ai didi

java - LWUIT:在后台线程中加载图像

转载 作者:行者123 更新时间:2023-12-03 12:56:57 25 4
gpt4 key购买 nike

我有一个列表,其中包含大约 20 个图像 URL 和其他一些内容。

我想显示其他内容(描述)并允许用户在加载 20 张图像时与应用程序交互。

我注意到,无论我尝试什么,在图像完成加载之前我都无法与表单交互,即使我正在另一个线程中进行加载。

这是我现在使用的解决方案。

private Container createServerItems() throws Exception {
Container list = new Container(new BoxLayout(BoxLayout.Y_AXIS));

final int size = mediaList.size();

final Button buttons[] = new Button[size];

System.out.println("In here: " + size);
for (int i = 0; i < size; i++) {
Container mainContainer = new Container(new BorderLayout());
Media m = new Media();
m.fromJSONString(mediaList.elementAt(i).toString());

buttons[i] = new Button("please wait");

final int whichButton = i;
Display.getInstance().callSerially(new Runnable() {

public void run() {
try {
System.out.println(MStrings.replaceAll(m.getImgURL(), "\"", ""));
final StreamConnection streamConnection = (StreamConnection) Connector.open(MStrings.replaceAll(m.getImgURL(), "\"", ""));
Image image = Image.createImage(streamConnection.openInputStream());
streamConnection.close();

buttons[whichButton].setText("");
buttons[whichButton].setIcon(image.scaled(32, 32));

} catch (Exception e) {
}
}
});
TextArea t = new TextArea(m.getDesc());
t.setEditable(false);
t.setFocusable(false);
t.setGrowByContent(true);

mainContainer.addComponent(BorderLayout.WEST, buttons[i]);
mainContainer.addComponent(BorderLayout.CENTER, t);

list.addComponent(mainContainer);
}
return list;
}

最佳答案

方法一: LWUIT 1.5 有一个强大的 LWUIT4IO 库来解决您的问题。

摘自 Shai's Blog link

A feature in LWUIT4IO to which I didn't give enough spotlight is the cache map, its effectively a lean hashtable which stores its data using weak/soft references (depending on the platform) and falls back to storage when not enough memory is available. Its a great way to cache data without going overboard. One of the cool things about it is the fact that we use it seamlessly for our storage abstraction (which hides RMS or equivalent services) in effect providing faster access to RMS storage which is often slow on devices.



另一个有用的链接是 here

这个想法是将网络 IO 功能委托(delegate)给单例,以避免任何 UI 死锁,就像您面临的那样。

一个很好的视频演示 here由 vprise 提供,解释了如何将 GUI 功能绑定(bind)到您的 netbeans。在这个大约 7:00 分钟的视频中,它解释了 ImageDownloadService 的使用。将组件绑定(bind)到其缩略图 url 的类,该 url 将从网络无缝获取并填充图像。

方法二:创建自定义逻辑的难点之一
  • 创建一个将与网络接口(interface)的单例以获取
    数据
  • 使用队列处理顺序图像下载服务
  • 为这个单例创建一个新线程并在队列中等待。
  • 与每个图像下载服务绑定(bind)一个监听器与调用
    组件,以便更容易更新正确的组件。
  • 关于java - LWUIT:在后台线程中加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8422187/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com