error: non-static variable this cannot be referenced from a static context

Status
Niet open voor verdere reacties.

Royy212

Gebruiker
Lid geworden
19 jan 2011
Berichten
183
Hey allemaal,

Ik ben net begonnen met een boek om de basics van Java te leren en tijdens een opdracht ben ik op een fout gekomen.
Wanneer ik de tekst wil compilen krijg ik deze error: 'error: non-static variable this cannot be referenced from a static context'.
Op regel 11 (in het rood) van mij main class. zit waarschijnlijk de fout volgens de compiler.

Dit is mijn main class:
Code:
import javax.swing.*;
 
public class Vb0201 extends JFrame {
    
    public static void main(String[] args) {
	
	JFrame frame = new Vb0201();
	frame.setSize(400, 200);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setTitle("Test");
	[COLOR="#FF0000"]JPanel paneel = new Paneel();[/COLOR]
	frame.setContentPane (paneel);
	frame.setVisible(true);
    }
    
    	public class Paneel extends JPanel{
		private JButton knop;
		private JTextField tekstvak;
		
		public Paneel() {
			knop = new JButton ("Klik");
			tekstvak = new JTextField (10);
			add (knop);
			add (tekstvak);
		}
		
}

}

En dit is mijn class Paneel:
Code:
import javax.swing.*;



	class Paneel extends JPanel{
		private JButton knop;
		private JTextField tekstvak;
		
		public Paneel() {
			knop = new JButton ("Klik");
			tekstvak = new JTextField (10);
			add (knop);
			add (tekstvak);
		}
		
}

Zou iemand mij bij deze error kunnen helpen?

Mvg,
Roy

Zelf opgelost, ik zag dat ik de class Paneel al in mijn main class had, aangezien ik eerst niet wist dat ik een aparte class voor Paneel moest maken.
 
Laatst bewerkt:
Code:
import javax.swing.*;
 
public class Vb0201 extends JFrame {
    public Vb0201(){
       	
	JFrame frame = new Vb0201();
	frame.setSize(400, 200);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setTitle("Test");
	JPanel paneel = new Paneel();
	frame.setContentPane (paneel);
	frame.setVisible(true);
    }

    public static void main(String[] args) {
         new Vb0201();
    }
    
    	public class Paneel extends JPanel{
		private JButton knop;
		private JTextField tekstvak;
		
		public Paneel() {
			knop = new JButton ("Klik");
			tekstvak = new JTextField (10);
			add (knop);
			add (tekstvak);
		}
		
}

}

Probeer dit is.

Vanuit een static routine kan je enkel andere static routines aanspreken.
En aangezien main static is. Moet je dit verhelpen..

Enige rare hier is, is dat je dat paneel aanmaakt in je static routine..

gr,
Maxim
 
Laatst bewerkt:
Beste Roy,

Je definieert een public klasse in een klasse. Dit is niet mogelijk. De klasse moet of een inner-class worden (private class) of gedefinieerd worden in z'n eigen bestand.

Informatie over inner-classes. Ik denk alleen dat dit nog een beetje hoog gegrepen is.
http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html

Code:
public class Vb201 extends JFrame {
    
    public static void main(String[] args) {
	
	JFrame frame = new Vb201();
	frame.setSize(400, 200);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setTitle("Test");
	JPanel paneel = new Paneel();
	frame.setContentPane (paneel);
	frame.setVisible(true);
    }
}

Code:
public class Paneel extends JPanel{
		private JButton knop;
		private JTextField tekstvak;
		
		public Paneel() {
			knop = new JButton ("Klik");
			tekstvak = new JTextField (10);
			add (knop);
			add (tekstvak);
		}
		
}

p.s. neem een kijkje naar Maxim zijn code. Hij brengt meer scheiding in de structuur aan.

Groeten,
Newbi
 
Laatst bewerkt:
Bedankt voor de hulp :), ik had btw de vraag op opgelost gezet, ik had mijn Paneel class ook in mn main class staan.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan