Komischer Fehler bei Java

Diskutiere Komischer Fehler bei Java im Webmaster Hilfe / Programmierer Forum Forum im Bereich Computerprobleme; Guten Abend hier erstmal der komplette Code: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class spiel_qui...

  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. Anzeige

    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:
    26.065
    Zustimmungen:
    109
    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. #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:

  11. 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();
    
     
  12. #11 lol1996lol, 23.06.2013
    lol1996lol

    lol1996lol Erfahrener Benutzer

    Dabei seit:
    10.12.2010
    Beiträge:
    450
    Zustimmungen:
    0
    Also meine Start Datei sieht im Moment so aus:
    Code:
    import Menuepunkte.*;
    
    public class start 
    {
    	public static void main(String[] args)
    	{
    		menue mymenue = new menue();
    		
    		
    	}
    }
    so wie zu es beschrieben hat funktioniert es leider nicht Eclipse gibt mir die Meldung:
    "menue cannot be resolved to a type"
    aus. Habe es auch schon mit den genauen Klassen probiert aber dies funktioniert ebenfalls nicht.
     
  13. Lotus

    Lotus Erfahrener Benutzer

    Dabei seit:
    17.02.2007
    Beiträge:
    2.428
    Zustimmungen:
    0
    Wenn du in der main mal "Menuepunkte." schreibst und dann strg+leertaste drückst schlägt dir Eclipse vor, welche Klassen du verwenden kannst. Evtl. kriegst du ja so deine richtige Klasse ausgewählt?!
     
  14. #13 lol1996lol, 23.06.2013
    lol1996lol

    lol1996lol Erfahrener Benutzer

    Dabei seit:
    10.12.2010
    Beiträge:
    450
    Zustimmungen:
    0
    Soweit komm ich nicht mal :D Allein diese menue mymenue = new menue(); erzeugt ja den Fehler. Wenn du oben im import meinst: Dort schlägt er mir gar nichts vor.
     
  15. Lotus

    Lotus Erfahrener Benutzer

    Dabei seit:
    17.02.2007
    Beiträge:
    2.428
    Zustimmungen:
    0
    Dann lösch das von mir angegebene damit kein Fehler mehr vorhanden ist ;)
     
  16. #15 lol1996lol, 23.06.2013
    lol1996lol

    lol1996lol Erfahrener Benutzer

    Dabei seit:
    10.12.2010
    Beiträge:
    450
    Zustimmungen:
    0
    Also ich habe jetzt folgendes versucht:
    open beim import mit Menuepunkte. und dann STR+Leer schlägt er mir nichts vor, den import so lassen (import Menuepunkte.*; ) und dann versuchen im main mit Menuepunkte. STR+Leer. Selbes Ergebnis Eclipse zeigt mir nichts an.
     
  17. Lotus

    Lotus Erfahrener Benutzer

    Dabei seit:
    17.02.2007
    Beiträge:
    2.428
    Zustimmungen:
    0
    Hast du TeamViewer? Dann könnte ich mir das mal anschauen. Andernfalls weiß ich gerade echt nicht wo das Problem liegt :/
     
  18. #17 lol1996lol, 23.06.2013
    lol1996lol

    lol1996lol Erfahrener Benutzer

    Dabei seit:
    10.12.2010
    Beiträge:
    450
    Zustimmungen:
    0
    können wir machen siehe PM.
     
  19. #18 lol1996lol, 23.06.2013
    lol1996lol

    lol1996lol Erfahrener Benutzer

    Dabei seit:
    10.12.2010
    Beiträge:
    450
    Zustimmungen:
    0
    Wann hast du denn ungefähr vor dich einzuloggen? Nur damit ich auch vorm Rechner bin.
     
  20. Anzeige

    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.
  21. Lotus

    Lotus Erfahrener Benutzer

    Dabei seit:
    17.02.2007
    Beiträge:
    2.428
    Zustimmungen:
    0
    Wann du willst ;)
     
  22. #20 lol1996lol, 23.06.2013
    lol1996lol

    lol1996lol Erfahrener Benutzer

    Dabei seit:
    10.12.2010
    Beiträge:
    450
    Zustimmungen:
    0
    Das artet ja langsam zum Chat aus :D Also von mir aus jetzt
     
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. Fehler bei der Wiederherstellung?

    Fehler bei der Wiederherstellung?: Hallöle! Ich habe gestern mein Notebook auf Werkswerkeinstellungen (hießen doch so oder?) zurückgesetzt. Nachdem ich mich dann angemeldet habe...
  2. 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...
  3. 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...
  4. 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,...
  5. 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...