Platform.runLater(() -> não inicia nunca

Olá. Neste tópico eu não gostaria de resolver um problema em específico, mas sim entender melhor o que está acontecendo por trás dos panos no meu projeto. Eu encontrei MUITAS exceções dizendo coisas do tipo: java.lang.IllegalStateException: Not on FX application thread;. Bem, essa exceção em particular já é auto explicativa, eu estou tentando alterar algo a partir de outra Thread. Porém eu não posso evitar isso. Mas eu me deparei com outras exceções também. E resolvi todas elas simplesmente colocando o código dentro dessa estrutura:

Platform.runLater(() -> {

});

Porém agora eu venho notando que muitos dos códigos que ficam dentro dessa estrutura demoram muito para ser executados ou até mesmo não são executados. E neste tópico eu gostaria de saber se alguém aqui sabe me explicar isso?

Editado

Eu citei o problema e citei também o que eu acho que está acontecendo. Bem, isso acontece em várias partes do meu programa, mas eu acho que mesmo assim vale a pena postar as partes do código aqui.

Problema 1:

	Platform.runLater(() ->{
		final HBox h = new HBox();
		h.setAlignment(Pos.CENTER_LEFT);
		h.getChildren().add(icon);
		h.getChildren().add(new Label("Message"));
		if(!alwaysOnTop){
			AnchorPane anch = new AnchorPane();
			Button bt = new Button();
			bt.setGraphic(new ImageView(new Image(getClass().getResourceAsStream("/icons/cancel.png"))));
			bt.setOnAction((ActionEvent) ->{
				FadeOutLeftTransition f = new FadeOutLeftTransition(h);
				f.play();
				f.setOnFinished(new EventHandler<ActionEvent>() {
					@Override
					public void handle(javafx.event.ActionEvent arg0) {
						desktop.getChildren().remove(h);
					}
				});
			});
			bt.getStyleClass().add("button-with-icon");
			anch.getChildren().add(bt);
			anch.setRightAnchor(bt, 0.14);
			anch.setTopAnchor(bt, 0.14);
			h.getChildren().add(anch);
		}
		h.getStyleClass().add("notification");
		h.setAlignment(Pos.CENTER_LEFT);
		HBox.setHgrow(h.getChildren().get(0), Priority.SOMETIMES);
		HBox.setHgrow(h.getChildren().get(1), Priority.ALWAYS);
		if(!alwaysOnTop){
			HBox.setHgrow(h.getChildren().get(2), Priority.SOMETIMES);
		}
	});

Problema 2

                        ActionListener a = new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				switch(e.getActionCommand()){
				case "Não perturbe":
					Services.DO_NOT_DISTURB.set(!Services.DO_NOT_DISTURB.get());
					break;
				case "Desabilitar segundo plano":
					setTrayIconEnabled(false);
					tray.remove(trayIcon);
					Save();
					break;
				case "Abrir janela":
					try{
						Platform.runLater(() ->{
							System.out.println("Abrindo janela");
					    	Start.m.show();
						});
					}catch(IllegalStateException ex){
						ex.printStackTrace();
					}
					break;
				case "Encerrar sessão":
					Methods.logout();
					break;
				case "Sair":
					System.exit(0);
				}
			}
		};

Obs: Caso seja necessário, o objeto Start.m é da classe MainWindow

Problema 3

public static void logout(){
	Platform.runLater(() ->{
	      Start.m.Close();
		  File f = new File(Methods.MakeProgramFolder().getAbsolutePath()+"/user.dat");
		  f.delete();
		  System.gc();
		  new Login().show();
	});
}

Problema 4

public void addItem(long id, String title, String date, boolean constant, ArrayList<String> itens){
	EvtItem child = new EvtItem(id, title, date, constant, itens);
	System.out.println("Date: "+date);
	System.out.println(date.substring(0,3));
	String[] split = date.split("/");
	child.setYear(Integer.parseInt(split[2]));
	child.setMonth(Integer.parseInt(split[1]));
	child.setDay(Integer.parseInt(split[0]));
	if(!Methods.ArrayListContains(this.itens, child)){
		this.itens.add(child);
		Platform.runLater(() ->{
	    	  getChildren().add(child);
		});
	}
}

Problema 5

public void clear(){
	itens.clear();
	Platform.runLater(() ->{
    	  getChildren().clear();
	});
}

Obs: itens é um ArrayList

Problema 6

		Button bt = new Button("Fazer");
		bt.setOnAction((ActionEvent) -> {
			Platform.runLater(() ->{
				try {
					ItemDAO.doEvent(idEvt);
				} catch (SQLException e) {
					e.printStackTrace();
				}
				((VBox)this.getParent()).getChildren().remove(this);
			});
		});