質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

0回答

853閲覧

マルチタスクで処理の進行状況を得るために値をその都度返す方法

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2021/09/04 06:29

編集2021/09/06 02:42

###やりたいこと
マルチタスクで処理の進行状況として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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問