Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 以多线程方式显示来自web url的图像_Multithreading_Blackberry - Fatal编程技术网

Multithreading 以多线程方式显示来自web url的图像

Multithreading 以多线程方式显示来自web url的图像,multithreading,blackberry,Multithreading,Blackberry,我有52个来自web URL的图像。我想在多线程过程中显示这些图像 谁能告诉我这是怎么可能的 我实现了下面的代码,但它不工作 for (int i = 0; i <total_data; i++) { GetBitmapClass getBitmapClass=new GetBitmapClass(i, image_path[i]); if(Thread.activeCount()>14) { //S

我有52个来自web URL的图像。我想在多线程过程中显示这些图像

谁能告诉我这是怎么可能的

我实现了下面的代码,但它不工作

    for (int i = 0; i <total_data; i++) {

        GetBitmapClass getBitmapClass=new GetBitmapClass(i, image_path[i]);

        if(Thread.activeCount()>14)
        {
            //System.out.println("Size "+pending_thread.size());
            pending_thread.addElement(getBitmapClass);

        }else
        {

            getBitmapClass.start();
        }

}


        //Thread class




        class GetBitmapClass extends Thread
        {
            int index;
            String url;

            public GetBitmapClass(int index,String url)
            {
                this.index=index;
                this.url=url;

            }

            public void run() {
               // TODO Auto-generated method stub



                StreamConnection stream = null;
                InputStream in = null;


                if(Thread.activeCount()>14)
                {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }




                System.out.println("Thread "+index+" Started \n count= "+Thread.activeCount());

                try {
                    //stream = (StreamConnection) Connector.open(url+";deviceside=true;");
                    stream = (StreamConnection) Connector.open(url+";interface=wifi");
                    in = stream.openInputStream();
                } 
                catch (Exception e) {

                }

                byte[] data = new byte[1024];
                try {
                    DataBuffer db = new DataBuffer();
                    int chunk = 0;
                    while (-1 != (chunk = in.read(data))) {
                        db.write(data, 0, chunk);
                    }
                    in.close();

                    data = db.getArray();
                } catch (Exception e) {
                }

                EncodedImage jpegPic = EncodedImage.createEncodedImage(data, 0,
                        data.length);
                        Bitmap bm = jpegPic.getBitmap();

                        bmp[index]=bm;


                    UiApplication.getUiApplication().invokeLater (new Runnable() {
                        public void run() 
                        {   

                            bitmapFields[index].setBitmap(bmp[index]);
                            gridFieldManager.add(bitmapFields[index]);

                            if((pending_thread.size()>0))
                                {
                                    GetBitmapClass thread1=(GetBitmapClass)pending_thread.elementAt(0);
                                    try
                                    {
                                        thread1.start();
                                        pending_thread.removeElementAt(0);
                                    }
                                    catch (Exception e) {
                                        // TODO: handle exception
                                        System.out.print("Thread Not Started");
                                    }

                                    System.out.println("Size Reduce"+pending_thread.size());
                                }
                            System.out.print("Thread Completed"+index);
                        }
                    });

        } 
for(int i=0;i 14)
{
//System.out.println(“Size”+pending_thread.Size());
挂起的线程addElement(getBitmapClass);
}否则
{
getBitmapClass.start();
}
}
//螺纹类
类GetBitmapClass扩展线程
{
整数指数;
字符串url;
公共GetBitmapClass(int索引,字符串url)
{
这个。索引=索引;
this.url=url;
}
公开募捐{
//TODO自动生成的方法存根
StreamConnection-stream=null;
InputStream in=null;
if(Thread.activeCount()>14)
{
试一试{
睡眠(1000);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
System.out.println(“线程”+索引+”已启动\n count=“+Thread.activeCount());
试一试{
//stream=(StreamConnection)Connector.open(url+“deviceside=true;”);
流=(流连接)连接器。打开(url+“接口=wifi”);
in=stream.openInputStream();
} 
捕获(例外e){
}
字节[]数据=新字节[1024];
试一试{
DataBuffer db=新的DataBuffer();
int chunk=0;
而(-1!=(chunk=in.read(data))){
db.write(数据,0,块);
}
in.close();
data=db.getArray();
}捕获(例外e){
}
EncodedImage jpegPic=EncodedImage.createEncodedImage(数据,0,
数据(长度);
位图bm=jpegPic.getBitmap();
bmp[index]=bm;
UiApplication.getUiApplication().invokeLater(新的Runnable()){
公开募捐
{   
位图字段[index].setBitmap(bmp[index]);
add(位图字段[索引]);
如果((挂起的线程大小()>0))
{
GetBitmapClass线程1=(GetBitmapClass)挂起线程.elementAt(0);
尝试
{
thread1.start();
挂起的线程removeElementAt(0);
}
捕获(例外e){
//TODO:处理异常
系统输出打印(“线程未启动”);
}
System.out.println(“Size Reduce”+pending_thread.Size());
}
系统输出打印(“线程完成”+索引);
}
});
} 
}


提前感谢。

尝试同时运行多个线程对BB来说是个坏主意。这不是桌面。通常情况下,你应该避免运行多个沉重的后台线程,否则你可能会将你的主UI线程降低到用户会停止使用你的应用程序并称之为“迟缓”的程度。你的线程很重-它们调整图像大小、进行网络连接、操作位图。为了解决这个问题,您需要创建一个
Runnable
任务列表,并在唯一的后台线程上执行它们。根据我的经验,在BB上按顺序执行任务比同时运行所有任务更有效。

同时运行多个线程对BB来说是个坏主意。这不是桌面。通常情况下,你应该避免运行多个沉重的后台线程,否则你可能会将你的主UI线程降低到用户会停止使用你的应用程序并称之为“迟缓”的程度。你的线程很重-它们调整图像大小、进行网络连接、操作位图。为了解决这个问题,您需要创建一个
Runnable
任务列表,并在唯一的后台线程上执行它们。根据我的经验,在BB上按顺序执行任务比一次运行所有任务更有效。

我忘了关闭流连接。需要关闭流连接。

我忘了关闭流连接。需要关闭流连接。

这里发生了什么。。看来应该行得通。检查你的防火墙。然后给我正确的信息它是如何运行的。这个代码在黑莓模拟器中正常工作,但在黑莓设备中最多加载32个图像。。我不知道这个设备到底发生了什么。所以给我一些建议。检查这可能是图像大小的问题。如果图像大小很大,则可能会导致内存问题。因此,它将抛出一些内存异常。您是否在运行时收到任何此类异常??不,尼尔,我没有得到任何类型的运行时异常。我花了一些时间用适当的代码标记重新格式化您的问题。我认为您没有准确地发布代码段。例如:您真的在For循环中声明了GetBitmapClass吗?我建议您使用适当的标记(大括号按钮{}允许您发布代码)编辑您的问题,并确保发布所有相关的代码片段。看起来,您的代码逻辑永远不会提取挂起的线程