IllegalStateException bloque l'execution du code

Fermé
chrisee Messages postés 171 Date d'inscription dimanche 23 février 2014 Statut Membre Dernière intervention 29 juillet 2017 - 24 nov. 2016 à 01:46
chrisee Messages postés 171 Date d'inscription dimanche 23 février 2014 Statut Membre Dernière intervention 29 juillet 2017 - 24 nov. 2016 à 11:05
Salut,

J'essai de fixer le programme de l’exécution de mon bout de code pour essayer d'appliquer le pattern MVC vu que je suis entrain de l'apprendre,et je suis bloque dans mon programme main qui renvois des erreur lors du lancement.J'ai essayé de revoir mon code et je l'impression tout va bien.

Voici le code:

1)Mon model


public class Model
{
private String firstname;
private String lastname;

public Model(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}

public String getFirstname() {
return firstname;
}

public void setFirstname(String firstname) {
this.firstname = firstname;
}

public String getLastname() {
return lastname;
}

public void setLastname(String lastname) {
this.lastname = lastname;
}
}


2)Ma vue


import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;


public class Vue {
private final Stage fenetre;
private final Label firstnameLabel;
private final Label lastnameLabel;
private TextField firstnameTextField;
private TextField lastnameTextField;
private final Button firstnameSaveButton;
private final Button lastnameSaveButton;
private final Button hello;
private final Button bye;


//C'est le constructeur
public Vue(String titre) {
fenetre=new Stage();
fenetre.setTitle(titre);


//Widgets
firstnameLabel = new Label("Firstname");
lastnameLabel = new Label("Lastname");
firstnameTextField = new TextField();
lastnameTextField = new TextField();
firstnameSaveButton = new Button("Save firstname");
lastnameSaveButton = new Button("Save lastname");
hello = new Button("Hello!");
bye = new Button("Bye!");

VBox layout=new VBox();
layout.getChildren().addAll(firstnameLabel,firstnameTextField,firstnameSaveButton,hello,lastnameLabel,lastnameTextField,lastnameSaveButton,bye);

//Scene
Scene sc=new Scene(layout,300,100);

fenetre.setScene(sc);
fenetre.show();
}


//Nos getters et nos setters
public TextField getFirstnameTextField() {
return firstnameTextField;
}

public void setFirstnameTextField(TextField firstnameTextField) {
this.firstnameTextField = firstnameTextField;
}

public TextField getLastnameTextField() {
return lastnameTextField;
}

public void setLastnameTextField(TextField lastnameTextField) {
this.lastnameTextField = lastnameTextField;
}

public Button getFirstnameSaveButton() {
return firstnameSaveButton;
}
public Button getLastnameSaveButton() {
return lastnameSaveButton;
}

public Button getHello() {
return hello;
}

public Button getBye() {
return bye;
}

}


3)Mon controlleur


import javax.swing.*;

public class Controller
{
private final Model model;
private final Vue vue;


//Constructeur


public Controller(Model model, Vue vue) {
this.model = model;
this.vue = vue;
initVue();
}

public void initVue()
{
vue.getFirstnameTextField().setText(model.getFirstname());
vue.getLastnameTextField().setText(model.getLastname());
}

public void initController()
{
vue.getFirstnameSaveButton().setOnAction(e->saveFirstname());
vue.getLastnameSaveButton().setOnAction(e->saveLastname());
vue.getHello().setOnAction(e->sayHello());
vue.getBye().setOnAction(e->sayBye());
}
private void saveFirstname()
{
model.setFirstname(vue.getFirstnameTextField().getText());
JOptionPane.showMessageDialog(null,"Firstname saved!","Info",JOptionPane.INFORMATION_MESSAGE);
}

private void saveLastname()
{
model.setLastname(vue.getLastnameTextField().getText());
JOptionPane.showMessageDialog(null,"Lastname saved!","Info",JOptionPane.INFORMATION_MESSAGE);
}
private void sayHello()
{
JOptionPane.showMessageDialog(null,"Hello "+model.getFirstname()+" "+model.getLastname(),"Info",JOptionPane.INFORMATION_MESSAGE);
}
private void sayBye()
{
System.exit(0);
}
}


4)Mon programe main



public class Main
{
public static void main(String[] args)
{
Model m=new Model("Christian","Lisangola");
Vue v=new Vue("Exemple MVC");
Controller c=new Controller(m,v);
c.initController();
}
}
A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
24 nov. 2016 à 06:52
Bonjour,

Lorsqu'une exception est levé en Java elle est contextualisée, c'est à dire que l'on sait exactement où est la ligne de code qui pose problème, il faudrait que tu nous mettes la stack complète de l'exception en indiquant à quelles lignes de code correspond chaque ligne de l'exception.
0
chrisee Messages postés 171 Date d'inscription dimanche 23 février 2014 Statut Membre Dernière intervention 29 juillet 2017 10
24 nov. 2016 à 11:05

Exception in thread "main" java.lang.IllegalStateException: Not on FX application thread; currentThread = main
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:210)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:393)
at javafx.stage.Stage.<init>(Stage.java:233)
at javafx.stage.Stage.<init>(Stage.java:219)
at Vue.<init>(Vue.java:23)
at Main.main(Main.java:6)
Java Result: 1


Voici les lignes concernes:

Dans le fichier Vue:ligne 23


fenetre=new Stage();


Dans le fichier Main:ligne 6

Vue v=new Vue("Exemple MVC");
0