diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java index a396d6f6..bead7283 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java @@ -171,10 +171,11 @@ public class PLaunchApp { }).start(); } - private static int downloaded = 0; + private static int downloadedSs = 0; public static void downloadAssets(final JAssets assets, String assetsVersion, final File outputDir) throws IOException { - LinkedBlockingQueue workQueue = new LinkedBlockingQueue<>(); - final ThreadPoolExecutor executor = new ThreadPoolExecutor(50, 50, 500, TimeUnit.MILLISECONDS, workQueue); + ArrayBlockingQueue workQueue = new ArrayBlockingQueue<>(100); + RejectedExecutionHandler handler = new ThreadPoolExecutor.CallerRunsPolicy(); + final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 50, 100, TimeUnit.SECONDS, workQueue, handler); File hasDownloadedFile = new File(outputDir, "downloaded/" + assetsVersion + ".downloaded"); if (!hasDownloadedFile.exists()) { @@ -182,30 +183,30 @@ public class PLaunchApp { Map assetsObjects = assets.objects; File objectsDir = new File(outputDir, "objects"); for (JAssetInfo asset : assetsObjects.values()) { - executor.execute(() -> { - mIsAssetsProcessing = !UIKit.updateProgressSafe(currProgress / maxProgress, "Downloading " + assetsObjects.keySet().toArray(new String[0])[downloaded]); + threadPoolExecutor.execute(() -> { + mIsAssetsProcessing = !UIKit.updateProgressSafe(currProgress / maxProgress, "Downloading " + assetsObjects.keySet().toArray(new String[0])[downloadedSs]); + + if (!mIsAssetsProcessing) { + threadPoolExecutor.shutdownNow(); + return; + } try { if(!assets.map_to_resources) downloadAsset(asset, objectsDir); - else downloadAssetMapped(asset,(assetsObjects.keySet().toArray(new String[0])[downloaded]),outputDir); + else downloadAssetMapped(asset,(assetsObjects.keySet().toArray(new String[0])[downloadedSs]),outputDir); } catch (IOException e) { e.printStackTrace(); mIsAssetsProcessing = false; } currProgress++; - downloaded++; + downloadedSs++; }); } - executor.shutdown(); - try { - while ((!executor.awaitTermination(250, TimeUnit.MILLISECONDS)) && (!localInterrupt.get()) && mIsAssetsProcessing) {} - executor.shutdownNow(); - while (!executor.awaitTermination(250, TimeUnit.MILLISECONDS)) {} - System.out.println("Fully shut down!"); - } catch (InterruptedException e) { - e.printStackTrace(); - } + threadPoolExecutor.shutdown(); + while (!threadPoolExecutor.isTerminated()) { } + hasDownloadedFile.getParentFile().mkdirs(); + hasDownloadedFile.createNewFile(); System.out.println("Assets end time: " + System.currentTimeMillis()); } } @@ -236,4 +237,4 @@ public class PLaunchApp { DownloadUtils.downloadFile(MINECRAFT_RES + assetPath, outFile); } } -} +} \ No newline at end of file