mercredi 3 juin 2015

Fehler bei Würfelsimulator GUI

Hallo liebe Leute.

Ich wollte für mich einen kleinen Würfelsimulator zusammenbasteln, der in einem kleinen Fenster läuft. Man soll dann auf den Button drücken können, der den entsprechenden Würfel simuliert. Das Ergebnis soll in ein Textfeld gesetzt werden. Ebenfalls soll aus diesem Textfeld vorher das Ergebnis genommen werden und in ein weiteres Textfeld eingefügt werden welches sogesehen das vorige Ergebnis speichert. Nun habe ich dieses kleine programm fertig gestellt, jedoch entsteht bei mir eine NullPointerException, sobald ich einen meiner Button drücke.

Anbei schonmal der Code

Fenster Klasse:
Java Code:

  1.  
  2. public class WürfelFenster extends Frame {
  3.  
  4. private WürfelController Wcrtl;
  5. Button w4, w6, w8, w10, w12, w20;
  6. private Label erg, vori;
  7. TextField ergebnis;
  8. TextField voriges;
  9.  
  10. /**
  11. * Konstruktor für das Fenster
  12. */
  13. public WürfelFenster(WürfelController Wcrtl){
  14. this.Wcrtl = Wcrtl;
  15. setTitle("D&D Würfelsimulator");
  16. setLayout(grid);
  17. setSize(300, 300);
  18. addWindowListener(new WürfelController());
  19.  
  20. w4 = new Button("W4");
  21. w6 = new Button("W6");
  22. w8 = new Button("W8");
  23. w10 = new Button("W10");
  24. w12 = new Button("W12");
  25. w20 = new Button("W20");
  26. erg = new Label("Ergebnis: ");
  27. vori = new Label("Voriges Ergebnis: ");
  28. ergebnis = new TextField("1");
  29. voriges = new TextField("1");
  30. ergebnis.setEnabled(false);
  31. voriges.setEnabled(false);
  32.  
  33. // Nicht wichtiger Code wurde weggelassen
  34.  
  35. setVisible(true);
  36.  
  37. addActionListeners();
  38.  
  39. }
  40.  
  41. /**
  42. * Actionlistener für den Buttondruck
  43. */
  44. private void addActionListeners() {
  45.  
  46. w4.addActionListener(new ActionListener() {
  47. @Override
  48. public void actionPerformed(ActionEvent e) {
  49. Wcrtl.zustandButtonPressed(Zustand.W4);
  50. }
  51. });
  52. w6.addActionListener(new ActionListener() {
  53. @Override
  54. public void actionPerformed(ActionEvent e) {
  55. Wcrtl.zustandButtonPressed(Zustand.W6);
  56. }
  57. });
  58. w8.addActionListener(new ActionListener() {
  59. @Override
  60. public void actionPerformed(ActionEvent e) {
  61. Wcrtl.zustandButtonPressed(Zustand.W8);
  62. }
  63. });
  64. w10.addActionListener(new ActionListener() {
  65. @Override
  66. public void actionPerformed(ActionEvent e) {
  67. Wcrtl.zustandButtonPressed(Zustand.W10);
  68. }
  69. });
  70. w12.addActionListener(new ActionListener() {
  71. @Override
  72. public void actionPerformed(ActionEvent e) {
  73. Wcrtl.zustandButtonPressed(Zustand.W12);
  74. }
  75. });
  76. w20.addActionListener(new ActionListener() {
  77. @Override
  78. public void actionPerformed(ActionEvent e) {
  79. Wcrtl.zustandButtonPressed(Zustand.W20);
  80. }
  81. });
  82. }
  83. public enum Zustand{W4, W6, W8, W10, W12, W20 }
  84. }


Und die Controller Klasse:
Java Code:

  1.  
  2. /**
  3.  * @author Marcel
  4.  *
  5.  */
  6. public class WürfelController extends WindowAdapter {
  7.  
  8. private WürfelFenster view;
  9.  
  10. public void zustandButtonPressed(Zustand zustand){
  11. Random rnd = new Random();
  12. int z;
  13. switch(zustand){
  14. case W4:
  15. view.voriges.setText(view.ergebnis.getText());
  16. z = rnd.nextInt(4)+1;
  17. view.ergebnis.setText(Integer.toString(z));
  18. break;
  19. case W6:
  20. view.voriges.setText(view.ergebnis.getText());
  21. z = rnd.nextInt(6)+1;
  22. view.ergebnis.setText(Integer.toString(z));
  23. break;
  24. case W8:
  25. view.voriges.setText(view.ergebnis.getText());
  26. z = rnd.nextInt(8)+1;
  27. view.ergebnis.setText(Integer.toString(z));
  28. break;
  29. case W10:
  30. view.voriges.setText(view.ergebnis.getText());
  31. z = rnd.nextInt(10)+1;
  32. view.ergebnis.setText(Integer.toString(z));
  33. break;
  34. case W12:
  35. view.voriges.setText(view.ergebnis.getText());
  36. z = rnd.nextInt(12)+1;
  37. view.ergebnis.setText(Integer.toString(z));
  38. break;
  39. case W20:
  40. view.voriges.setText(view.ergebnis.getText());
  41. z = rnd.nextInt(20)+1;
  42. view.ergebnis.setText(Integer.toString(z));
  43. break;
  44. default:
  45. break;
  46. }
  47.  
  48. }
  49. @Override
  50. public void windowClosing(WindowEvent e) {
  51. e.getWindow().dispose();
  52. System.exit(0);
  53. }
  54. }


Wenn die Fehlermeldung zeigt mir auch zwei Lines an an denen der Fehler sein soll.
Drücke ich z.B. den W4 Button so liegen die Fehler bei folgenden Zeilen

Java Code:

  1.  
  2. case W4:
  3. view.voriges.setText(view.ergebnis.getText()); // Fehlerhafte Zeile
  4. z = rnd.nextInt(4)+1;
  5. view.ergebnis.setText(Integer.toString(z));
  6. break;
  7.  
  8. w4.addActionListener(new ActionListener() {
  9. @Override
  10. public void actionPerformed(ActionEvent e) {
  11. Wcrtl.zustandButtonPressed(Zustand.W4); // Fehlerhafte Zeile
  12. }
  13. });


Hoffe das ist nicht zu unübersichtlich!

Vielen Dank schon einmal im vorraus für eure Überlegungen.

MFG,
Vincentthe0ne


Fehler bei Würfelsimulator GUI

0 commentaires:

Enregistrer un commentaire