Permalänk
Inaktiv

Java-kod vill inte fungera.

Hej!
Jag har börjat en kurs i programmering på gymnasiet och har stött på ett problem.
Som ni förstår så har jag vääääldigt lite kunskap och jag stöter ofta på massa problem när jag försöker "Compile:a".
Det är första gången som jag är i denna delen av SC forum och igen, jag har bara läst en termin så jag är allt annat än bra.

Så här är mitt problem:
Jag har börjat på ett litet spel "sten, sax, påse" och har skrivit ihop en liten kod men jag får det inte att fungera.

Jag får felmeddelandet "local variable StenLose1 is accessed from within inner class needs to be declared final" men jag har deklarerat "StenLose1" som "final" (tror jag).

Spelet är långt ifrån färdigt men det skulle vara väldigt bra om jag kunde komma förbi det här problemet först innan jag arbetade vidare.

Är det någon här på SC som kan hjälpa mig?

KOD:

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Grafik extends JFrame { private final JLabel StatsJLabel; private final JLabel Null1JLabel; private final JLabel Null2JLabel; private final JLabel StenJLabel; private final JLabel SaxJLabel; private final JLabel PåseJLabel; private final JButton StenJButton; private final JButton SaxJButton; private final JButton PåseJButton; private int NPC, PLAYER; private final ImageIcon StenWin1; private final ImageIcon SaxWin1; private final ImageIcon PåseWin1; private final ImageIcon StenLose1; private final ImageIcon SaxLose1; private final ImageIcon PåseLose1; private final ImageIcon StenWin2; private final ImageIcon SaxWin2; private final ImageIcon PåseWin2; private final ImageIcon StenLose2; private final ImageIcon SaxLose2; private final ImageIcon PåseLose2; /** * Constructor for objects of class Grafik */ public Grafik() { setLayout(new GridLayout(3,3)); ImageIcon Sten1, Sten2, Sax1, Sax2, Påse1, Påse2, StenWin1, SaxWin1, PåseWin1, StenLose1, SaxLose1, PåseLose1, StenWin2, SaxWin2, PåseWin2, StenLose2, SaxLose2, PåseLose2; int stats, null1, null2; Sten1 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\sten1.png"); Sax1 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\sax1.png"); Påse1 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\påse1.png"); Sten2 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\sten2.png"); Sax2 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\sax2.png"); Påse2 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\påse2.png"); StenWin1 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\stenWin1.png"); SaxWin1 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\saxWin1.png"); PåseWin1 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\påseWin1.png"); StenLose1 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\stenLose1.png"); SaxLose1 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\saxLose1.png"); PåseLose1 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\påseLose1.png"); StenWin2 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\stenWin2.png"); SaxWin2 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\saxWin2.png"); PåseWin2 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\påseWin2.png"); StenLose2 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\stenLose2.png"); SaxLose2 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\saxLose2.png"); PåseLose2 = new ImageIcon("C:\\Users\\Hule.WINDOWS-1ACDU8L\\Pictures\\påseLose2.png"); StenJLabel = new JLabel (Sten2, SwingConstants.CENTER); getContentPane().add(StenJLabel); SaxJLabel = new JLabel (Sax2, SwingConstants.CENTER); getContentPane().add(SaxJLabel); PåseJLabel = new JLabel (Påse2, SwingConstants.CENTER); getContentPane().add(PåseJLabel); StenJButton = new JButton(Sten1); getContentPane().add(StenJButton); SaxJButton = new JButton(Sax1); getContentPane().add(SaxJButton); PåseJButton = new JButton(Påse1); getContentPane().add(PåseJButton); Null1JLabel = new JLabel("", SwingConstants.CENTER); Null1JLabel.setSize(75,5); getContentPane().add(Null1JLabel); StatsJLabel = new JLabel(NPC + " - " + PLAYER, SwingConstants.CENTER); StatsJLabel.setFont(new Font("", Font.PLAIN, 10)); StatsJLabel.setSize(75,5); getContentPane().add(StatsJLabel); Null2JLabel = new JLabel("", SwingConstants.CENTER); Null2JLabel.setSize(75,5); getContentPane().add(Null2JLabel); StenJLabel = new JLabel(Sten2); getContentPane().add(StenJButton); SaxJLabel = new JLabel(Sax2); getContentPane().add(SaxJButton); PåseJLabel = new JLabel(Påse2); getContentPane().add(PåseJButton); ActionListener lisClick = new ActionListener() { public void actionPerformed(ActionEvent ae) { int Slump = (int)(Math.random() * 3)+1; // Slumpar tal i intervallet 1-3. if(ae.getSource() == StenJButton) { if(Slump==1) { StenJLabel.setIcon(StenLose1); StenJButton.setIcon(StenLose2); } if(Slump==2) { SaxJLabel.setIcon(SaxLose1); StenJButton.setIcon(StenWin2); } if(Slump==3) { StenJLabel.setIcon(PåseWin1); StenJButton.setIcon(StenLose2); } } if(ae.getSource() == SaxJButton) { if(Slump==1) { StenJLabel.setIcon(StenWin1); SaxJButton.setIcon(SaxLose2); } if(Slump==2) { SaxJLabel.setIcon(SaxLose1); SaxJButton.setIcon(SaxLose2); } if(Slump==3) { PåseJLabel.setIcon(PåseLose); SaxJButton.setIcon(SaxLose); } } if(ae.getSource() == PåseJButton) { if(Slump==1) { StenJLabel.setIcon(StenLose1); PåseJButton.setIcon(PåseWin2); } if(Slump==2) { StenJLabel.setIcon(SaxWin1); PåseJButton.setIcon(PåseLose2); } if(Slump==3) { PåseJLabel.setIcon(PåseLose1); PåseJButton.setIcon(PåseLose2); } } repaint(); } }; StenJButton.addActionListener(lisClick); SaxJButton.addActionListener(lisClick); PåseJButton.addActionListener(lisClick); setSize(new Dimension(473, 470)); setResizable(false); setTitle("Sten, Sax, Påse!"); } /** * An example of a method - replace this comment with your own * * @param y a sample parameter for a method * @return the sum of x and y */ public static void main () { // put your code here Grafik frame = new Grafik(); frame.setVisible(true); } }

Dold text

Allt är skrivet med "BlueJ".

EDIT: Det ingår en del bilder i 'programmet' men jag tror inte dom behövs för att kompilera.

La till code-taggar
Permalänk
Medlem

Problemet är att din ActionListener använder de lokala variablerna som du angett i konstruktorn, och de är inte final. Du kan antingen låta bli att definiera alla variabler två gånger, eller så använder du this-referensen inuti din ActionListener för att nå rätt variabel:

this.StenLose1

PS. Det blir lättare att läsa kod om du använder [CODE]-taggar

PS2. Konventionen bjuder att man använder camelCase i Java, dvs liten inledande bokstav (samma som vanligtvis gäller för javascript). Det är en smaksak men annan Java-kod kommer sannolikt att följa den standarden. Personligen gillar jag camelcase

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Hedersmedlem

Jag la till code-taggar

Permalänk
Inaktiv
Skrivet av Teknocide:

Problemet är att din ActionListener använder de lokala variablerna som du angett i konstruktorn, och de är inte final. Du kan antingen låta bli att definiera alla variabler två gånger, eller så använder du this-referensen inuti din ActionListener för att nå rätt variabel:

this.StenLose1

PS. Det blir lättare att läsa kod om du använder [CODE]-taggar

PS2. Konventionen bjuder att man använder camelCase i Java, dvs liten inledande bokstav (samma som vanligtvis gäller för javascript). Det är en smaksak men annan Java-kod kommer sannolikt att följa den standarden. Personligen gillar jag camelcase

Tack så jättemycket för hjälpen! Din hjälp var guld värt för mig!

Skrivet av Shimonu:

Jag la till code-taggar

Tack så mycket! Ska tänka på det i fortsättningen.