diff --git a/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java b/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java index 9f0eca9c63a2d478bc6159773c615574374845ae..4bb5739f076cece9bac19bf21b4683d0eb8bdbbd 100644 --- a/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java +++ b/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java @@ -20,7 +20,6 @@ import ecorp.easy.installer.AppConstants; import ecorp.easy.installer.controllers.subcontrollers.AbstractSubController; import ecorp.easy.installer.EasyInstaller; import ecorp.easy.installer.models.Device; -import ecorp.easy.installer.threads.EasilyCancelable; import ecorp.easy.installer.threads.ThreadFactory; import java.io.IOException; @@ -56,7 +55,6 @@ public class MainWindowController implements Initializable { ResourceBundle i18n ;//internationalization String currentSubRootId =null; ThreadFactory factory = new ThreadFactory("/yaml/"); - EasilyCancelable thread; //will contain flashThread or preparation Thread Device device; //Object encapsulating data about the device to flash /** @@ -281,9 +279,6 @@ public class MainWindowController implements Initializable { public ThreadFactory getThreadFactory(){ return factory; } - public void setThread(EasilyCancelable thread){ - this.thread = thread; - } // Other methods /** * Method call when app is closing @@ -291,9 +286,6 @@ public class MainWindowController implements Initializable { */ public void onStop(){ logger.debug("onStop()"); - if(this.thread != null){ - thread.onCancelRequestRecieved(); - } } /** diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java index 5c9a19f3efcd548278c286c2a0f37cc6a5de1e57..0dcbccd22abc68dca80aa6804d732475cad436b6 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java @@ -92,7 +92,9 @@ public class DeviceDetectedController extends AbstractSubController{ } }); try{ - new Thread(detectorTask).start(); + Thread thread = new Thread(detectorTask); + thread.setDaemon(true); + thread.start(); } catch(Exception e){ logger.error("startDetection(), error: {}", e.toString()); diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java index 698f80e0ae26e51701cf512d20fea3cbc6864ede..bf17fea5b18d6d71ed67d845bd03cc76953dcd58 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java @@ -107,7 +107,9 @@ public class DownloadSrcController extends AbstractSubController { this.preparationProgressBar.progressProperty().bind(currentTask.progressProperty()); this.progressLabel.textProperty().bind(currentTask.messageProperty()); this.preparationProgressBar.getStyleClass().remove("errorBar"); - new Thread(currentTask).start(); + Thread thread = new Thread(currentTask); + thread.setDaemon(true); + thread.start(); return true; } return false; @@ -119,7 +121,6 @@ public class DownloadSrcController extends AbstractSubController { progressLabel.setText(i18n.getString("download_lbl_complete")); progressTitle.setVisible(false); parentController.disableNextButton(false); - parentController.setThread(null); } diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java index 7a7005ed29b4f3de5c279368f1c056213992176c..9dac87fc0dd937ea2eab3c00098a25817ef16b57 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java @@ -22,6 +22,7 @@ import java.net.URL; import java.util.ResourceBundle; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; import java.util.regex.Pattern; import javafx.fxml.FXML; import javafx.scene.control.Button; @@ -94,13 +95,20 @@ public class EAccountController extends AbstractSubController{ mailInput.requestFocus(); break; case 0: - ExecutorService executorSrv = Executors.newSingleThreadExecutor(); + ExecutorService executorSrv = Executors.newSingleThreadExecutor( new ThreadFactory() { + public Thread newThread(Runnable r) { + Thread t = Executors.defaultThreadFactory().newThread(r); + t.setDaemon(true); + return t; + } + }); AskAccountTask askInvitationTask = new AskAccountTask(userInput, i18n.getString("askAccount_string")); askInvitationTask.setOnSucceeded(workerStateEvent -> { String result = (String)workerStateEvent.getSource().getValue(); setResultInstruction(result); checkMailBtn.setText(i18n.getString("eAccount_btn_checkMail")); }); + executorSrv.submit(askInvitationTask); executorSrv.shutdown(); checkMailBtn.setText(i18n.getString("eAccount_lbl_processing")); diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java index fbd2ade97687a9ba864ae8695c435b812145ece4..6215f83a7d571677a88286ab5aa4391adf7f22f6 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java @@ -117,7 +117,9 @@ public class FeedbackController extends AbstractSubController { sendAnswerBtn.setText(i18n.getString("feedback_btn_sendTryAgain")); logger.error("onSendBtnClicked(), sending feedback: failure, error: {}", eh.getSource().getException().toString()); }); - new Thread(uploadTask).start(); + Thread uploadTaskThread = new Thread(uploadTask); + uploadTaskThread.setDaemon(true); + uploadTaskThread.start(); } diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java index bc10744aa68d0944e5e992349f4c7768648af86d..d7e5943517046f4b9f0efd339789c8da71d4d54b 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java @@ -24,7 +24,6 @@ import ecorp.easy.installer.helpers.DeviceHelper; import ecorp.easy.installer.logger.GUIAppender; import ecorp.easy.installer.logger.LogPathPropertyDefiner; import ecorp.easy.installer.models.DataBundle; -import ecorp.easy.installer.threads.EasilyCancelable; import ecorp.easy.installer.threads.FlashThread; import ecorp.easy.installer.threads.TimerTask; import ecorp.easy.installer.threads.UploadToEcloudTask; @@ -114,8 +113,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement thread = parentController.getThreadFactory().buildFlashThread(this, pauseLock); if(thread!= null){ - parentController.setThread((EasilyCancelable) thread); - + thread.setDaemon(true); //@TODO find another way to get the step number as yaml file can contains step for issue. By example //if script got issue, then load script 45 if success load script 2. //Then the stepSize won't fit with the real step that the user must perform @@ -242,7 +240,9 @@ public class FlashSceneController extends AbstractSubSteppedController implement timer = new TimerTask(averageTime, this); loadStepProgressIndicator.setProgress(0.0); //Reset to prevent showing last value loadStepProgressIndicator.setVisible(true); - new Thread(timer).start(); + Thread timerThread = new Thread(timer); + timerThread.setDaemon(true); + timerThread.start(); } this.stepTitleIcon.setImage(null); this.instructionsFlow.setVisible(false); //put it invisible instead ? @@ -397,7 +397,9 @@ public class FlashSceneController extends AbstractSubSteppedController implement logger.warn("sendLogToSupport(), sending log: failure, error = {}",eh.getSource().getException().toString() ); }); - new Thread(uploadTask).start(); + Thread uploadTaskThread = new Thread(uploadTask); + uploadTaskThread.setDaemon(true); + uploadTaskThread.start(); } } return false; diff --git a/src/main/java/ecorp/easy/installer/models/Step.java b/src/main/java/ecorp/easy/installer/models/Step.java index 067200d0ca15b38540cf13d31d9984468064c03d..8713286c592780c61749dcfa9673ddb81642ab2f 100644 --- a/src/main/java/ecorp/easy/installer/models/Step.java +++ b/src/main/java/ecorp/easy/installer/models/Step.java @@ -24,7 +24,6 @@ import java.util.Map; */ public class Step { private StepUi ui; - private boolean startNewThread = false; //@TODO REMOVE! define if a new thread should be started if this command succeeds private String script; //script's file script private String output; //Key of output to store as common parameter private String afterSuccess; // index of next script if succeed diff --git a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java index 158686209790c779bfee71fd84a997226e7af35c..a98b2f1f787a73cdca23d9bc962744e2f9ba94c2 100644 --- a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java +++ b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java @@ -139,6 +139,7 @@ public class DownloadTask extends Task{ ){ TimeOutRunnable timeoutRunnable = new TimeOutRunnable(); Thread timeoutThread = new Thread(timeoutRunnable); + timeoutThread.setDaemon(true); timeoutThread.start(); long downloadAmount =0; @@ -163,9 +164,10 @@ public class DownloadTask extends Task{ downloaded = (downloadAmount == fileSize); } } + //If i'm not wrong, the below code is not required anymore. //end of download, stop the timeout thread timeoutRunnable.stop(); - timeoutThread.join(1000); + //timeoutThread.join(1000); } //If cancelled or not download, delete the partially downloaded file diff --git a/src/main/java/ecorp/easy/installer/threads/EasilyCancelable.java b/src/main/java/ecorp/easy/installer/threads/EasilyCancelable.java deleted file mode 100644 index 401e131c2df5fded0cfd88b90068df8c01cf37e0..0000000000000000000000000000000000000000 --- a/src/main/java/ecorp/easy/installer/threads/EasilyCancelable.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2019-2020 - ECORP SAS - - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package ecorp.easy.installer.threads; - -/** - * - * @author vincent Bourgmayer - */ -public interface EasilyCancelable { - - public boolean onCancelRequestRecieved(); -} diff --git a/src/main/java/ecorp/easy/installer/threads/FlashThread.java b/src/main/java/ecorp/easy/installer/threads/FlashThread.java index 7c546c69eef51444da8c07ccf5015b0ef40c9b64..705d3cdd32e64741f2855c2cdad40886eb74cd3b 100644 --- a/src/main/java/ecorp/easy/installer/threads/FlashThread.java +++ b/src/main/java/ecorp/easy/installer/threads/FlashThread.java @@ -36,7 +36,7 @@ import org.slf4j.LoggerFactory; * * @author Vincent Bourgmayer */ -public class FlashThread extends Thread implements EasilyCancelable{ +public class FlashThread extends Thread { final protected static char COMMON_PARAM_IDENTIFIER = '$';//allow to identify when an param of a step is to load from common parameter final protected static Pattern REGEX_FIND_PARAM = Pattern.compile("\\$\\{(.*?)\\}"); private final static Logger logger = LoggerFactory.getLogger(FlashThread.class); @@ -279,17 +279,6 @@ public class FlashThread extends Thread implements EasilyCancelable{ running = true; } - /** - * Call "cancel" from super - * @return this.cancelled - */ - @Override - public boolean onCancelRequestRecieved(){ - this.cancel(false); - return this.cancelled; - } - - @Override public void run(){ if(commands.isEmpty()) return;