Ich bekomme eine Ausnahme und kann den Grund dafür nicht finden.
Die Ausnahme, die ich bekomme, ist:
java.lang.IllegalAccessError: Es wurde versucht, auf die Methode Connected.getData (Ljava / lang / String;) zuzugreifen. Ljava / sql / ResultSet; ab Klasse B.
Die Methode ist öffentlich.
public class B
{
public void myMethod()
{
Connected conn = new Connected(); // create a connected class in order to connect to The DB
ResultSet rs = null; // create a result set to get the query result
rs = conn.getData(sql); // do sql query
}
}
public class Connected
{
public ResultSet getData(String sql)
{
ResultSet rs = null;
try
{
prepareConnection();
stmt = conn.createStatement();
stmt.execute(sql);
rs = stmt.getResultSet();
}
catch (SQLException E)
{
System.out.println("Content.getData Error");
E.printStackTrace();
}
return rs;
}
Ich benutze Apache Tomcat 5.5.12 und JAVA 1.6
Dies geschieht beim Zugriff auf eine Methode mit Paketbereich einer Klasse, die sich im selben Paket befindet, sich jedoch in einem anderen JAR und Klassenlader befindet.
Dies war meine Quelle, aber der Link ist jetzt unterbrochen. Es folgt der vollständige Text aus dem Google-Cache:
quelle
commons-collections-3.2.1.jar
unter JBoss EAP 5.3 mit Struts 1.1 behoben, da sich diese JAR bereits in den JBoss-Bibliotheken befindet, aber auch in meinen Anwendungen enthalten war. Ich habe die JAR aus meiner Anwendung entfernt, wodurch das Problem behoben wurde.2.53.0
auf2.44.0
geholfen (ich habe Grails 2.3.11 verwendet, eine alte Version).Wenn
getData
es geschützt ist, versuchen Sie es öffentlich zu machen. Das Problem könnte in JAVA 1.6 bestehen und in 1.5x fehlenIch habe das für dein Problem. Unzulässiger Zugriffsfehler
quelle
Ich habe diesen Fehler in einer Spring Boot-Anwendung erhalten, in
@RestController ApplicationInfoResource
der eine verschachtelte Klasse vorhanden warApplicationInfo
.Es scheint, dass der
Spring Boot Dev Tools
einen anderen Klassenlader verwendet hat.Die Ausnahme, die ich bekam
Lösung
Ich habe die verschachtelte Klasse
ApplicationInfo
in eine separate Java-Datei verschoben und das Problem behoben.quelle
IllegalAccessError
war das überhaupt nicht vernünftig. Aber als ich die Maven-Abhängigkeit zu Dev Tools entfernte und kurz darauf wieder hinzufügte, funktionierte alles so, wie es sollte.Dies passierte mir, als ich eine Klasse in einem Glas hatte, die versuchte, von einem anderen Glas auf eine private Methode in einer Klasse zuzugreifen. Ich habe einfach die private Methode in public geändert, neu kompiliert und bereitgestellt, und danach hat es einwandfrei funktioniert.
quelle
Aus Android-Sicht: Methode in der API-Version nicht verfügbar
Ich habe dieses Problem hauptsächlich erhalten, weil ich etwas verwendet habe, das in dieser Android-Version nicht verfügbar / veraltet ist
Falscher Weg:
Notification.Builder nBuilder = new Notification.Builder(mContext); nBuilder.addAction(new Notification.Action(android.R.drawable.ic_menu_view,"PAUSE",pendingIntent));
Richtiger Weg:
Notification.Builder nBuilder = new Notification.Builder(mContext); nBuilder.addAction(android.R.drawable.ic_media_pause,"PAUSE",pendingIntent);
hier Notification.Action ist vor API 20 nicht verfügbar und meine Mindestversion war API 16
quelle
Nur eine Ergänzung zur gelösten Antwort:
Dies KANN ein Problem mit der Sofortausführungsfunktion von Android Studio sein, wenn Sie beispielsweise festgestellt haben, dass Sie vergessen haben, die Codezeile
finish()
zu Ihrer Aktivität hinzuzufügen, nachdem Sie eine andere geöffnet haben, und die Aktivität, die Sie nicht hätten öffnen sollen, bereits wieder geöffnet haben ( was dasfinish()
gelöst ist), dann fügst du hinzufinish()
und Instant Run tritt auf, dann stürzt die App ab, da die Logik gebrochen wurde.TL: DR;
Dies ist nicht unbedingt ein Codeproblem, sondern nur ein Sofortausführungsproblem
quelle
In meinem Fall bestand das Problem darin, dass eine Methode in einer Schnittstelle
A
als definiert wurdedefault
, während ihre Unterklasse sie als privat überschrieb. Als die Methode aufgerufen wurde, stellte die Java-Laufzeit fest, dass eine private Methode aufgerufen wurde.Ich bin immer noch verwirrt, warum sich der Compiler nicht über die private Außerkraftsetzung beschwert hat.
public interface A { default void doStuff() { // doing stuff } } public class B { private void doStuff() { // do other stuff instead } } public static final main(String... args) { A someB = new B(); someB.doStuff(); }
quelle
In meinem Fall wurde dieser Fehler beim Ausführen meiner App in Wildfly mit der von Eclipse bereitgestellten .ear-Datei angezeigt. Da es von Eclipse bereitgestellt wurde, enthielt der Bereitstellungsordner keine .ear-Datei, sondern einen Ordner, der es darstellt, und darin alle Gläser, die in der .ear-Datei enthalten gewesen wären. als ob das Ohr geöffnet wäre.
Also hatte ich im Glas:
class MySuperClass { protected void mySuperMethod {} }
Und in einem anderen Glas:
class MyExtendingClass extends MySuperClass { class MyChildrenClass { public void doSomething{ mySuperMethod(); } } }
Die Lösung hierfür war das Hinzufügen einer neuen Methode zu MyExtendingClass:
class MyExtendingClass extends MySuperClass { class MyChildrenClass { public void doSomething{ mySuperMethod(); } } @Override protected void mySuperMethod() { super.mySuperMethod(); } }
quelle
Ich habe den gleichen Fehler aufgrund eines Konfigurationsproblems in Intellij erhalten. Wie im Screenshot gezeigt. Haupt- und Testmodul zeigten auf zwei verschiedene JDK. (Drücken Sie im Intellij-Projekt F12, um die Moduleinstellungen zu öffnen.)
Außerdem verwendeten alle meine Dto's @ lombok.Builder, was ich in @Data änderte.
quelle
Ich bekam eine ähnliche Ausnahme, aber auf Klassenebene
zB Verursacht durch: java.lang.IllegalAccessError: versucht, auf die Klasse zuzugreifen ....
Ich habe das behoben, indem ich meine Klasse öffentlich gemacht habe.
quelle