private void startSimulation() throws Exception {
		try {
			Map<Integer, Boolean> shuffledNodes = new HashMap<Integer, Boolean>();
			int nodeIndex = 0;
			//Randomization algorithm, works better than Collections.shuffle!
			while (!(shuffledNodes.size() == simulationSize)) {
				int random = (int) (Math.random() * (simulationSize + 1));
				if (!(shuffledNodes.containsKey(random)) && random != 0) {
					shuffledNodes.put(random, true);
					ring[nodeIndex++] = random;
					liveNodes.add(String.valueOf(random));
				}
			}
			for (nodeIndex = 0; nodeIndex < simulationSize; nodeIndex++) {

				System.out.print(String.valueOf(ring[nodeIndex]) + "-->");

				int waitMillis = (int) (Math.random() * 5000);
				String left = (nodeIndex == 0) ? String
						.valueOf(ring[simulationSize - 1]) : String
						.valueOf(ring[nodeIndex - 1]);
						String right = (nodeIndex == simulationSize - 1) ? String
								.valueOf(ring[0]) : String.valueOf(ring[nodeIndex + 1]);
								ProcessBuilder builder = new ProcessBuilder("java.exe",
										"-Djava.security.policy=security.policy", "Node",
										String.valueOf(waitMillis),
										String.valueOf(ring[nodeIndex]), left, right);
								builder.directory(new File(System.getProperty("user.dir")
										+ "/bin"));
								builder.start();
			}
			System.out.println("");
		} catch (Exception exception) {
			System.out.println("Error starting ring simulation...");
			exception.printStackTrace();
		}
	}