0

バックグラウンド スレッドから ListField に画像を表示する方法を探しています。最初に drawListRow でこれを試します

path = (String) imagePaths.elementAt(index);
bit = connectServerForImage(path);

g.drawBitmap(xText, y + yText, 80, 200, bit, 0, 0);

しかし、リスト全体をスムーズにスクロールすることはできず、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);
}

しかし、何も起こりません。任意のアイデア、コメント。


そうです、私は2週間前にJava開発、特にBB開発を始めたばかりで、このリンクを試しています。JSONリターンからパスURLを取得した後、画像をダウンロードするためのバックグラウンドスレッドを追加したいと思います。

最初のスレッド:

_connectionthread = new Connection();
_connectionthread.start();

private class Connection extends Thread
{
    public Connection()
    {
       super();
    }

    public void run() {      
        try {}
        catch (Exception e) {}
    } 
}

2番目のスレッド:

_imgConnectionThread = new ImgConnection();
_imgConnectionThread.start();

private class ImgConnection extends Thread
{      
        public ImgConnection() {
           super();
        }

        public void run() {            
                try {
                }
                catch (Exception e)
                {
                }

        }
}

ListField の画像を更新するには?

4

2 に答える 2

2

回答は、pastebin.com/90UKTHzP のコードに基づいています。

ひどいコード!読むのも下手なのも本当に難しい!さまざまな場所からいくつかの例をコピーして貼り付けたようです。また、同じ動作でデフォルトの動作をオーバーライドします。また、MainScreen には既に VerticalManagerField があります。また、IAE の原因となる manager へのすべての繰り返しのリストを追加しています。そして、メインの 1 つのスレッドは、2 番目のスレッドの結果に依存します。それらは同時に開始されますが、サーバーから json を取得し、処理に時間がかかる可能性があるため、イメージ スレッドはおそらく結果なしで実行を終了します。

それを修正するための主な推奨事項-きれいなコードブックを読んでください!Java 開発- 慣例、マルチスレッドについての詳細をお読みください。BB 開発- UI API、ネットワークについて読む。

最後に、json を取得して解析するスレッドを 1 つだけ開始します。完了したら、別のスレッドを開始して画像を取得します。

バッテリーとプロセッサの時間を節約できるいくつかの小さなこともあります-オンデマンドで画像のロードを開始します-ペイントまたはペイントするとき(ユーザーはリストをスクロールします)。

于 2012-06-10T07:25:45.660 に答える
1

慣例により、Java クラス名は大文字で始まるため、imgConnection は実際には ImgConnection である必要があります。

あなたのサンプル コードでは、imgConnection がどこにもインスタンス化されていません。また、Thread.start() への呼び出しも見られません。これは、スレッドが開始された方法です。Thread.start() がなければ、何も起こらないことは驚くべきことではありません - スレッドは決して開始されません。

于 2012-06-10T00:00:10.820 に答える