Komischer Fehler bei Java

Dieses Thema im Forum "Webmaster Hilfe / Programmierer Forum" wurde erstellt von lol1996lol, 22.06.2013.

  1. #1 lol1996lol, 22.06.2013
    lol1996lol

    lol1996lol Erfahrener Benutzer

    Dabei seit:
    10.12.2010
    Beiträge:
    450
    Zustimmungen:
    0
    Guten Abend

    hier erstmal der komplette Code:

    Code:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class spiel_qui
    {
      public static JFrame frage = new JFrame("Spiel");
      public static JLabel infos = new JLabel("");
      public static JLabel fragen = new JLabel("");
      public static JTextField antwort = new JTextField(15);
      public static JButton weiter = new JButton("Weiter"); 
      public static JButton schliessen = new JButton("Schließen");
      public static String antwortreturn = "";
      public static int weiter_int = 0;
      public static int exit_int = 0;
      
      
      public void frage(String frage, int highscore, int fragen)
      {
        
        
        String highscorestring = String.valueOf(highscore);
        String fragennrstring = String.valueOf(fragen);
        ActionListener Aweiterli = new ActionListener()
        {
          public void actionPerformed (ActionEvent e)
          {
            antwortreturn = antwort.getText();
            fragen.setText("");
            antwort.setText("");
            infos.setText("");
            frage.setVisible(false);
            weiter_int = 1;
            
          }
        };
        ActionListener spiel_exit_li = new ActionListener()
        {
          public void actionPerformed (ActionEvent e)
          {
            exit_int = 1;
            Lfrage.setText("");
            Tantwort.setText("");
            Lhighscore.setText("");
            spiel.setVisible(false);
            
          }
        };
        exitint = 0;
        fragen.setText("");
        frage.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frage.setLayout(new GridLayout(5, 1));
        infos.setText("Dein Highscore: " + highscorestring + "Punkte " + "Frage " + fragennrstring + "/10");
        frage.add(Lhighscore);
        fragen.setText(fragenstring + "?");
        frage.add(fragen);
        frage.add(antwort);
        frage.add(weiter);
        frage.add(schliessen);
        weiter.addActionListener(Aweiterli);
        schliessen.addActionListener(spiel_exit_li);
        frage.setVisible(true);  
      }
      
    }
    
      
    

    Beim Compelieren bekomme ich folgende Fehlermeldung: "spiel_qui.java:29:9: error: local variable fragen is accessed from within inner class; needs to be declared final
    "

    Nach dem ich das ganze Gegoogelt hab kam raus das ich das ganze als final deklarieren muss. Aber dann kann ich den Wert ja nicht mehr verändern.

    MFG
     
  2. AdMan

    schau mal hier: Windows-Wartungs-Tool. Viele Probleme lassen sich damit einfach beheben. Oftmals ist der PC dann auch schneller!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  3. Lotus

    Lotus Erfahrener Benutzer

    Dabei seit:
    17.02.2007
    Beiträge:
    2.428
    Zustimmungen:
    0
    Mach einfach keine inner Class. Definier action performed nicht als innere Klasse, dann sollte das auch klappen. Hab mal nen BSP. rausgesucht welches dir zeigen sollte was ich meine:
    ActionEvent und ActionListener
     
  4. #3 lol1996lol, 22.06.2013
    Zuletzt bearbeitet: 23.06.2013
    lol1996lol

    lol1996lol Erfahrener Benutzer

    Dabei seit:
    10.12.2010
    Beiträge:
    450
    Zustimmungen:
    0
    OK Danke das ging schnell, nur verstehe ich eine Sache nicht so ganz:
    In dem Beispiel wird "this" als Action Listener hinzugefügt nur als dieser Definiert wird steht da nirgendwo was von "this". Ich habe das jetzt so verstanden das "this" Das JFrame ist.

    Dann das zweite ist: Ich bin gerade dabei dieses "Projekt" auf mehrere classen aufzuteilen nur als ich das alles in einer Datei hatte hat dies so funktioniert nur hier nicht. Das selbe bei anderen Menuepunkten (Habe für jeden eine GUI File und ein File welches alles aufruft.). Bei den anderen GUI's habe ich es auch so und es funkt ?!
     
  5. #4 xandros, 22.06.2013
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.883
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    this wird nicht als ActionListener hinzugefuegt, sondern fuegt dem "BeispielListener" Eigenschaftswerte/Attributwerte hinzu. Somit bezieht sich this in dem Fall auf die Instanz, die von Beispiellistener erzeugt wird -> hier BeispielListener "bl".
     
  6. Lotus

    Lotus Erfahrener Benutzer

    Dabei seit:
    17.02.2007
    Beiträge:
    2.428
    Zustimmungen:
    0
    1. Was sind QUI's? Meinst du GUI's?
    2. Was genau willst du auf mehrere Klassen aufteilen? Bei einer GUI ist das nicht unbedingt sinnvoll die Sachen auf mehrere Klassen zu verteilen. Man trennt üblicherweise die Logik (das Model) von der GUI (Sicht) nach dem MVC (Model View Controller - Prinzip).
    Ohne Code und genauer Definition was du wo haben willst kann ich hier keine genauere Aussage treffen.

    3. Das mit dem this hat xandros schon ausreichend erklärt. Vielleicht sollte man dazusagen, dass this ein Keyword von Java ist und deswegen mit einer "Bedeutung"/Funktion vordefiniert existiert/belegt ist.
     
  7. #6 lol1996lol, 23.06.2013
    lol1996lol

    lol1996lol Erfahrener Benutzer

    Dabei seit:
    10.12.2010
    Beiträge:
    450
    Zustimmungen:
    0
    OK Danke werde es mir mit dieser Information nocheinmal genauer ansehen.
    Ja meinte ich hab mich nur irgendwie total verzettelt :D

    Also ich habe ein kleines Quiz geschrieben und demendsprechend gibt es ein kleines Menue welches Punkte wie: Einstellungen, Anleitungen etc. hat. In der Roh Fassung habe ich alles in zwei Dateien einmal für die GUI und einmal für den eigentlichen Code der alles runterrasselt. Nur ist es leider sehr schwer den überblick zu halten und darum habe ich jetzt für jeden Menuepunkt eigene Dateien.
    Habe alte mal hier hochgeladen damit ohr seht was ich meiner: https://code.google.com/p/kleines-java-quiz/source/browse/

    Aber darum geht es ja im Grunde gar nicht.
     
  8. #7 Blaxxun, 23.06.2013
    Blaxxun

    Blaxxun aka Noisy

    Dabei seit:
    06.11.2005
    Beiträge:
    6.171
    Zustimmungen:
    0
    quizgui.java Zeile 101 bis 114 würde ich mal anpassen und aus den einzelnen IF Bedinungen ELSE IF machen.
    Dann wird die Abfrage nur im schlechtesten Fall 3(/2) mal gemacht und nicht bei jedem Vergleich.
     
  9. #8 lol1996lol, 23.06.2013
    lol1996lol

    lol1996lol Erfahrener Benutzer

    Dabei seit:
    10.12.2010
    Beiträge:
    450
    Zustimmungen:
    0
    Geht kla Chef
     
  10. AdMan

    Es ist generell erstmal empfehlenswert alle ggf. veralteten oder fehlerhaften Treiber zu scannen und auf neue zu aktualisieren. Hier kannst du einen Treiber-Scanner downloaden. Das erspart oftmals viel Ärger und hilft gegen diverse Probleme.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  11. #9 lol1996lol, 23.06.2013
    lol1996lol

    lol1996lol Erfahrener Benutzer

    Dabei seit:
    10.12.2010
    Beiträge:
    450
    Zustimmungen:
    0
    OK Durch den externen Listener habe ich es jetzt hinbekommen nur habe ich jetzt noch Probleme mit dem Packages. Ich habe jetzt für jedes Untermenue einen eigenen Ordner/Package angelegt. Diese liegen alle im src. im src selber habe ich jetzt eine Datei mit der ich alle aufrufen möchte nur wenn ich dort mit
    Code:
    import Menuepunkte.*;
    alle Packages importiere zeigt Eclipse mir zwar an das er diese Packages findet aber ich kann die classen nicht mit, z.B.
    Code:
    Menuepunkte.menue menue = new Menuepunkte.menue()
    aufrufen. Ich habe mal ein Bild angehängt wie die Ordnerstruktur aussieht, da es doch etwas sehr schwierig zu beschreiben ist.
     

    Anhänge:

  12. Lotus

    Lotus Erfahrener Benutzer

    Dabei seit:
    17.02.2007
    Beiträge:
    2.428
    Zustimmungen:
    0
    1. Klassen sollte man mit großem Anfangsbuchstaben benennen. Ist nicht Pflicht, hilft aber anderen Programmierern einfacher durchzusehen und Klassen von Variablen zu unterscheiden.

    2.Mit Menuepunkte.menue referenzierst du lediglich ein Package, keine Klasse. Du kannst aber nur eine Klasse erzeugen. Weiterhin musst du das Package nicht mehr angeben, wenn du das Package bereits importiert hast (Natürlich nur wenn die Namen der Klassen eindeutig definiert wurden). Es sollte also reichen wenn du folgendes machst:
    Code:
    menue mymenue = new menue();
    
     
Thema: Komischer Fehler bei Java
Besucher kamen mit folgenden Suchen
  1. java fehlermeldung 448

Die Seite wird geladen...

Komischer Fehler bei Java - Ähnliche Themen

  1. Komischer Roter Kreis bei Games

    Komischer Roter Kreis bei Games: Hallo! Bei mir ist seit kurzem ein wie im Titel schon zu lesen ein komischer Roter Kreis wenn ich manche Games öffne. Z. b. bei Minecraft (siehe...
  2. Nach Fehler beim Flashen geht gar nichts mehr

    Nach Fehler beim Flashen geht gar nichts mehr: Hallo zusammen, ich hoffe dass mir jemand von euch weiterhelfen kann. Es geht um Folgendes: Ich habe ein DraginTouch Y88X, das ist ein ganz...
  3. Lenovo Ideapad G700 - Grafiktreiberinstallation Fehler

    Lenovo Ideapad G700 - Grafiktreiberinstallation Fehler: Hallo, vor ca. einem Jahr hab ich ein neues Lenovo Ideapad G700 bekommen, in welchem eine gt 720m verbaut ist. Ich hatte damals alle Treiber,...
  4. CryEngine First Time Login Fehler?

    CryEngine First Time Login Fehler?: Hallo, habe mir heute die CryEngine 3.5.8 SDK geholt und wollte mich anmelden. Es ging aber nicht. Dort steht das ich ein falsches Passwort oder...
  5. Fehler Aufruf GMX - application/octet-stream

    Fehler Aufruf GMX - application/octet-stream: Fehler Aufruf GMX - application/octet-stream Hallo zusammen! Ich habe seit einiger Zeit ein Problem beim Aufruf der GMX Seite. Ich kann die...