Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.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
Java 在线程中创建PDF_Java_Android_Multithreading - Fatal编程技术网

Java 在线程中创建PDF

Java 在线程中创建PDF,java,android,multithreading,Java,Android,Multithreading,在我的应用程序中,我正在生成一个PDF。这可能需要45秒,所以我决定制作一个进度条。进度条需要从一个独立于UI线程的线程中更新,因此我将“convertNotesToPDF”函数放在该线程中。在convertNotesToPDF函数中更新进度条。不幸的是,这造成了一些问题。我在progressbar线程中生成pdf时,大约有50%的时间会生成大小为0的pdf。另外50%的时间它工作正常,但这显然不会减少它。当我将convert notestopdf放在线程外时,一切都正常 这里有一些代码供参考。

在我的应用程序中,我正在生成一个PDF。这可能需要45秒,所以我决定制作一个进度条。进度条需要从一个独立于UI线程的线程中更新,因此我将“convertNotesToPDF”函数放在该线程中。在convertNotesToPDF函数中更新进度条。不幸的是,这造成了一些问题。我在progressbar线程中生成pdf时,大约有50%的时间会生成大小为0的pdf。另外50%的时间它工作正常,但这显然不会减少它。当我将convert notestopdf放在线程外时,一切都正常

这里有一些代码供参考。首先,这是一个在50%的时间内都能工作的代码(我拿出一些不相关的代码):

下面是我在progressbar线程外部转换noteStopDF时的代码:

new Thread(new Runnable() {
        public void run() {

            convertDataToPDF(bmap); 

            progressBar.dismiss();
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
        }
    }).start();
            convertNotesToPDF();    
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

感谢您抽出时间。

当您提到ProgressBarThread时,我不知道您在说什么。 而是尝试在线程中运行PDF处理,并在其运行方法中更新progressbar,如下所示:

runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        //update your progressbar

                    }
                });
因此,总体结构是:

Thread pdfThread=new Thread(
new Runnable()
{
   public void run()
   {
      convertDataToPDF(bmap); 
      convertNotesToPDF();
      runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            //update your progressbar

                        }
                    });         
   }
}
);
pdfThread.start();

使用异步任务。它是专门为这种东西设计的谢谢拉格哈!这项任务做得很好!
Thread pdfThread=new Thread(
new Runnable()
{
   public void run()
   {
      convertDataToPDF(bmap); 
      convertNotesToPDF();
      runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            //update your progressbar

                        }
                    });         
   }
}
);
pdfThread.start();