IllegalAccessException

Status
Nicht offen für weitere Antworten.

Felix

Bekanntes Mitglied
Hallo, ich habe ein Applet programmier, das aus Applet erbt. Nun hab ich es ohne Fehler übersetzt, sprich die class-Datei ist richtig und habe versucht es in eine HTML-Datei einzubinden. Das habe ich mit folgenden Applettags gemacht:
HTML:
<applet code="todo.class" width=1000 height=800>
</applet>

Beim öffnen der Website wird das Applet nicht angezeigt und in der JavaKonsole steht eine IllegalAccessException. Wie kann ich diese verhindern?

Gruß
der Felix
 

foobar

Top Contributor
Du darfst die Extension .class nicht mit angeben:
Code:
<applet code="todo" width=1000 height=800>
</applet>

BTW Klassen sollten immer mit einem Großbuchstaben beginnen.
 

Felix

Bekanntes Mitglied
damm funktionierts auch nicht...

ich habe 2 verschiedene Bücher über Applets und das eine sagt mit .class das andere ohne
 
B

bygones

Gast
IllegalAccessException klingt für mich mehr nach Datei lesen schreiben was nicht erlaubt ist ??

machst du irgendso was?
 

foobar

Top Contributor
Liegt die Klasse auch im selben Ordner?
Lässt sich das Applet über die Main-Methode starten?
 

Felix

Bekanntes Mitglied
ich schreibe weder in eine Datei noch lese ich aus eine aus. Ich habe bis jetzt nur die GUI programmiert und wollte die schon mal testen und schauen ob es übersichtlich ist.
Die html-Datei liegt im Selben Ordner wie die class-Datei.
Mein Applet hat keine main-Methode, nur eine init(), ist das vielleicht der Fehler? Das ist mein erstes Applet. In dem Buch steht, ich bräuchte keine main-methode ein Applet werde über init(), start(), stopp() gesteuert...

Gruß
der Felix
 

Felix

Bekanntes Mitglied
ich habe ein main-Methode eingefügt, funktioniert auch, aber es erscheint kein fenster...
obwohl ich die Klasse nun aus Panel erben lasse in der mainmethode eine neue Instanz erstelle deren größe setzte und sie sichtbar mache...

ich lass jetzt das ganze fenster in paint aufbauen und nicht in init, das hilft aber auch nicht...

Gruß
der Felix
 
B

bygones

Gast
dann zeig mal ein bisschen Code...

erstellst du nur einen Panel oder auch einen Container in dem das ganze hinzugefügt wird ??
 

Felix

Bekanntes Mitglied
Ich füge die Panels dem schon vorhandenen Panel hinzu:

Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
//Klasse todo aus Applet erstellen (Listener implementieren)
public class todo extends Panel /*implements ActionListener*/{
Container westContainer, southContainer, middleContainer, dayContainer, northContainer;
Button make = new Button("Neu");
Button done = new Button("Erledigt");
Button archiv = new Button("Archiv");
Button ordDate = new Button("nach Datum ordnen");
Button ordPrio = new Button("nach Priorität ordnen");
TextArea txt = new TextArea(5,70);
TextField deligat = new TextField("",10);
TextField register = new TextField("",2);
Choice day = new Choice();
Choice month = new Choice();
Choice year = new Choice();
Choice priorität = new Choice();
List listPriorität = new List();
List listAufgabe = new List();
List listTermin = new List();
List listDeligat = new List();
List listSeit = new List();
List listRegister = new List();
.......
public void paint(){
//Layoutmanager setzten
westContainer.setLayout(new GridLayout(1,2));
middleContainer.setLayout(new GridLayout(2,5));
northContainer.setLayout(new GridLayout(6,2));
.......
//Container hinzufügen
setLayout(new BorderLayout());
add(westContainer,BorderLayout.WEST);
add(southContainer,BorderLayout.SOUTH);
add(middleContainer,BorderLayout.CENTER);
//Komponenten hinzufügen
westContainer.add(ordDate);
westContainer.add(ordPrio);
southContainer.add(make);
southContainer.add(archiv);
middleContainer.add(new Label("Datum:"));
middleContainer.add(dayContainer);
middleContainer.add(new Label("Aufgabe:"));
middleContainer.add(txt);
middleContainer.add(new Label("Priorität:"));
middleContainer.add(priorität);
middleContainer.add(new Label("Deligat:"));
middleContainer.add(deligat);
middleContainer.add(new Label("Register"));
middleContainer.add(register);
dayContainer.add(day);
dayContainer.add(month);
dayContainer.add(year);
northContainer.add(listTermin);
northContainer.add(listAufgabe);
northContainer.add(listPriorität);
northContainer.add(listDeligat);
northContainer.add(listRegister);
northContainer.add(listSeit);
northContainer.add(new Label());
.....
}
 

Felix

Bekanntes Mitglied
eigentlich erstelle ich nur ein paar panel und setzt diese ineinender ein, um dann verschiedene andere Komponenten einzusetzten.
 
B

bygones

Gast
du brauchst aber ein Frame / window oder was auch immer, in das du den panel adden kannst....
 

Felix

Bekanntes Mitglied
ich hab jetzt ein frame erzeugt, das hinhzugefügt und dann alle panels in das Frame eingfügt. Funktioniert auch nicht....

Das wird in der Java Konsole angezeigt:
Code:
Laden: todo.class ist nicht öffentlich oder hat keinen öffentlichen Autor.
java.lang.IllegalAccessException: Class sun.applet.AppletPanel can not access a member of class todo with modifiers ""
	at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:57)
	at java.lang.Class.newInstance0(Class.java:302)
	at java.lang.Class.newInstance(Class.java:261)
	at sun.applet.AppletPanel.createApplet(AppletPanel.java:617)
	at sun.plugin.AppletViewer.createApplet(AppletViewer.java:1863)
	at sun.applet.AppletPanel.runLoader(AppletPanel.java:546)
	at sun.applet.AppletPanel.run(AppletPanel.java:298)
	at java.lang.Thread.run(Thread.java:534)

Gruß
der Felix
 

foobar

Top Contributor
Das sieht alles ziemlich wild aus.

Wo ist der Konstruktor und die init-Methode?
Warum überschreibst du die paint-Methode obwohl nichts auf das Panel gezeichnet wird?


Das wird in der Java Konsole angezeigt:
Deklarier die Klasse als public mit einem öffentlichen Konstruktor.

Code:
public class MyApplet extends Applet
{
   public MyApplet()
  {
   // do something  
  }
}
 

Felix

Bekanntes Mitglied
ich hab nicht alle methoden gepostet und da die init() eh nix macht... genauso wie start() und stopp()....

Ich hab jetzt alles, was vorher die paint() gemacht hat inden Konstruktor und den public deklariert, geht aber auch nicht... ich hab keine Ahnung warum nicht...

Code:
public todo(){
//Layoutmanager setzten
westContainer.setLayout(new GridLayout(1,2));
middleContainer.setLayout(new GridLayout(2,5));
northContainer.setLayout(new GridLayout(6,2));
mainframe.setLayout(new BorderLayout());
//Auswahllisten bestücken
for (int n=1;n<32;n++){
	Integer twn = new Integer(n);
	day.addItem(twn.toString());
	}
for (int n=1;n<13;n++){
	Integer twn = new Integer(n);
	month.addItem(twn.toString());
	}
for (int n=2005;n<2010;n++){
	Integer twn = new Integer(n);
	year.addItem(twn.toString());
	}
for (int n=1;n<10;n++){
	Integer twn = new Integer(n);
	priorität.addItem(twn.toString());
	}
//Container hinzufügen
add(mainframe);
mainframe.add(westContainer,BorderLayout.WEST);
mainframe.add(southContainer,BorderLayout.SOUTH);
mainframe.add(middleContainer,BorderLayout.CENTER);
//Komponenten hinzufügen
westContainer.add(ordDate);
westContainer.add(ordPrio);
southContainer.add(make);
southContainer.add(archiv);
middleContainer.add(new Label("Datum:"));
middleContainer.add(dayContainer);
middleContainer.add(new Label("Aufgabe:"));
middleContainer.add(txt);
middleContainer.add(new Label("Priorität:"));
middleContainer.add(priorität);
middleContainer.add(new Label("Deligat:"));
middleContainer.add(deligat);
middleContainer.add(new Label("Register"));
middleContainer.add(register);
dayContainer.add(day);
dayContainer.add(month);
dayContainer.add(year);
northContainer.add(listTermin);
northContainer.add(listAufgabe);
northContainer.add(listPriorität);
northContainer.add(listDeligat);
northContainer.add(listRegister);
northContainer.add(listSeit);
northContainer.add(new Label());
northContainer.add(new Label());
northContainer.add(new Label());
northContainer.add(new Label());
northContainer.add(new Label());
northContainer.add(done);

////LISTEN ZUM TEST FÜLLEN////////
listPriorität.add("Priorität");
listAufgabe.add("Aufgabe");
listTermin.add("Termin");
listDeligat.add("Deligat");
listSeit.add("seit");
listRegister.add("Register");
////ENDE DER TESTFÜLLUNG//////////
}

Dass muss schon alles in den Konstruktor, oder?

Gruß
der Felix
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java Fehlermeldung: IllegalAccessException Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben