@Override
	public void run() {
		progressBar.setMinimum(0);
		progressBar.setMaximum(100);
		progressBar.setValue(0);
		progressBar.setStringPainted(true);
		progressPerWorker = (int) Math.floor(100 / workers.size());
		numberOfWorkers = workers.size();

		for (SwingWorker<Boolean, Void> worker : workers) {
			synchronized (this) {
				currentWorker = worker;
			}
			worker.addPropertyChangeListener(this);
			worker.execute();
			while (!worker.isDone() && !worker.isCancelled()) {
				try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
					// do nothing
				}
			}
			try {
				successfullyFinished = successfullyFinished && worker.get();
			} catch (InterruptedException e) {
				// do nothing
			} catch (ExecutionException e) {
				successfullyFinished = false;
			}
			currentWorkerCounter++;
		}
		if (onFinishThread != null) {
			onFinishThread.start();
		}

	}