###やりたいこと
マルチタスクで処理の進行状況としてint型の値を毎回?毎フレーム? 取得させいたい
###質問内容
提示コードですがディレクトリの中身の画像を一つにまとめて一つのPDFを生成するソフトです。作り途中です。
以下のように処理が終わってからの演算結果ような取得ではなくその時のリアルタイムの処理の進行状況が知りたいので以下の変数aのゆうな値の取得をしたいのですがそれをするにはどういった処理をすればいいのでしょうか?
gihub: https://github.com/Shigurechan/PDFConverter
java
1public class Main 2{ 3 static int a = 0; 4 5 public static void task() 6 { 7 a = 1; 8 //変換処理 9 a = 2; 10 } 11 12 public static void main(String[] args) 13 { 14 15 task(); 16 System.out.println(a); 17 //System.out.println((char)27 + "[5C" + " AAAA "); 18 19 } 20} 21
// #################################################################################################
java
1import java.io.IOException; 2import java.io.File; 3 4import javax.imageio.ImageIO; 5 6import java.awt.image.BufferedImage; 7 8import java.util.ArrayList; 9//import java.util.Arrays; 10import java.util.Collections; 11import java.util.List; 12 13import org.apache.pdfbox.pdmodel.PDDocument; 14import org.apache.pdfbox.pdmodel.PDPage; 15import org.apache.pdfbox.pdmodel.PDPageContentStream; 16import org.apache.pdfbox.pdmodel.common.PDRectangle; 17import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; 18 19 20 21 22/* ################################################################## 23 * PDF 生成 ディレクトリ 24 * ##################################################################*/ 25 26public class Converter implements Runnable 27//public class Converter implements Runnable 28{ 29 30 File filePath; 31 PDDocument document; 32 List<Image> convList = new ArrayList<>(); 33 34 //document 35 public PDDocument getDocument() 36 { 37 return document; 38 } 39 40 //PDFを生成 41 private void GeneratePDF(List<Image> fileList) 42 { 43 try 44 { 45 46 List<PDPage> page = new ArrayList<>(); 47 48 49 FileControl.LoadImage(convList); //画像をロード 50 51 52 53 for(Image image : fileList) 54 { 55 PDRectangle rec = new PDRectangle(); 56 rec.setUpperRightX(0); 57 rec.setUpperRightY(0); 58 rec.setLowerLeftX(image.width); 59 rec.setLowerLeftY(image.height); 60 61 System.out.println(image.path + "Page Generate --- size ---> ("+ image.width + " , " + image.height + ")"); 62 63 page.add(new PDPage(rec)); 64 65 document.addPage(page.get(page.size() -1)); 66 } 67 68 69 for(int i = 0; i < fileList.size(); i++) 70 { 71 72 PDImageXObject xImage = PDImageXObject.createFromFile(fileList.get(i).path,document); 73 PDPageContentStream stream = new PDPageContentStream(document,page.get(i)); 74 stream.drawImage(xImage, 0,0); 75 76 System.out.println( "PDF Generate: "+ fileList.get(i).path); 77 stream.close(); 78 } 79 80 81 //document.save(filePath.getPath() + "\" + filePath.getName() + ".pdf"); 82 //System.out.println("--->: " + filePath.getPath() + "\" + filePath.getName() + ".pdf"); 83 84 85 //document.close(); 86 87 } 88 catch(IOException e) 89 { 90 e.printStackTrace(); 91 } 92 } 93 94 //コンストラクタ 95 public Converter(List<Image> a) 96 { 97 98 document = new PDDocument(); 99 //filePath = path; 100 101 convList = a; 102 } 103 104 @Override 105 public void run() 106 { 107 GeneratePDF(convList); //生成 108 109 } 110 111} 112
java
1import java.io.IOException; 2 3import java.io.File; 4 5import java.util.List; 6import java.util.ArrayList; 7 8import java.util.concurrent.ExecutorService; 9import java.util.concurrent.Executors; 10import java.util.concurrent.TimeUnit; 11 12import org.apache.pdfbox.pdmodel.PDDocument; 13//import org.apache.pdfbox.pdmodel.PDPage; 14 15 16 17/* 18* ############################### 19* ディレクトリを変換 20* ############################### 21*/ 22 23public class ConvertDirectory 24{ 25 26 FileControl.ProcessStatus status; //処理の進行状況 27 28 29 File path; //ディレクトリパス 30 int threadNum; //スレッド数 31 List<Converter> dirList = new ArrayList<>(); //変換 32 List<List<Image>> image = new ArrayList<>(); //画像 33 34 ExecutorService pool; //スレッドプール 35 36 //デバッグ用 処理時間 37 long startTime; //開始タイム 38 long endTime; //終了タイム 39 40 41 42 //コンストラクタ 43 public ConvertDirectory(File p,int t,ExecutorService es) 44 { 45 path = p; 46 threadNum = t; 47 pool = es; 48 } 49 50 51 52 public void Start() 53 { 54 FileControl.GetDirectory(path,image,threadNum); //パス取得 55 56 57 for(int i = 0; i < threadNum; i++) 58 { 59 dirList.add(new Converter(image.get(i))); 60 } 61 62 startTime = System.currentTimeMillis(); //デバッグ用 開始時間 63 64 //変換 65 for(Converter con : dirList) 66 { 67 pool.submit(con); 68 } 69 70 71 } 72 73 74 75 public void End() 76 { 77 78 79 try 80 { 81 List<PDDocument> document = new ArrayList<>(); 82 for(Converter d : dirList) 83 { 84 document.add(d.getDocument()); 85 } 86 87 88 for(int i = 1; i < document.size(); i++) 89 { 90 for(int j = 0; j < document.get(i).getNumberOfPages(); j++) 91 { 92 document.get(0).addPage(document.get(i).getPage(j)); 93 } 94 } 95 96 97 document.get(0).save("test.pdf"); //保存 98 99 100 101 //document.close 102 for(Converter d : dirList) 103 { 104 d.getDocument().close(); 105 } 106 107 108 } 109 catch(IOException e) 110 { 111 e.printStackTrace(); 112 } 113 114 endTime = System.currentTimeMillis(); //デバッグ用 終了時間 115 116 System.out.println("処理時間: " + (endTime - startTime)); 117 } 118} 119
java
1import java.io.*; 2import java.io.IOException; 3import java.util.ArrayList; 4import java.util.List; 5import java.util.Scanner; 6import java.util.concurrent.ExecutorService; 7import java.util.concurrent.Executors; 8import java.util.concurrent.TimeUnit; 9 10import org.apache.pdfbox.pdmodel.PDDocument; 11import org.apache.pdfbox.pdmodel.PDPage; 12//import org.apache.pdfbox.pdmodel.PDPageContentStream; 13//import org.apache.pdfbox.pdmodel.common.PDRectangle; 14//import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; 15 16 17public class Main 18{ 19 20 public static void main(String args[]) 21 { 22 final int threadNum = 8; //スレッド数 23 24 25 Scanner scanner = new Scanner(System.in); 26 27 System.out.println("windows: Ctrl + Z 開始"); 28 System.out.println("linux: Ctrl + D 開始\n"); 29 30 List<File> file = new ArrayList<>(); //ディレクトパス 31 List<ConvertDirectory> dirList = new ArrayList<>(); //変換ディレクトリ 32 33 while(true) 34 { 35 System.out.print("\nDirectory > "); 36 37 if(scanner.hasNextLine() == false) { break; } 38 String fileName = scanner.nextLine(); 39 40 file.add(new File(fileName)); 41 } 42 43 44 for(File f : file) 45 { 46 ExecutorService pool = Executors.newFixedThreadPool(threadNum); 47 48 //dirList.add(new ConvertDirectory(f,threadNum,pool)); 49 ConvertDirectory con = new ConvertDirectory(f,threadNum,pool); 50 con.Start(); 51 try 52 { 53 while(true) 54 { 55 pool.shutdown(); //スレッドプールを閉じる 56 57 if ( pool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS) == true) 58 { 59 break; 60 } 61 } 62 } 63 catch(InterruptedException e) 64 { 65 e.printStackTrace(); 66 } 67 68 con.End(); 69 } 70 71 72 //処理を開始 73 for(ConvertDirectory c : dirList) 74 { 75 //c.Start(); 76 } 77 78 79 80 81 System.out.println("\n\n\n\n\n全部終了"); 82 83 scanner.close(); //scanner close 84 } 85} 86 87
あなたの回答
tips
プレビュー