-
June 25th, 2021, 05:13 PM
#1
IllegalAccessError, cannot acces class
Please, I am using AIDE IDE on android with libgdx and everything was okay until I got error message:
Code:
06-25 22:38:02.730 14459 14484 E AndroidRuntime ava.lang.IllegalAccessError:
jIllegal class access ('com.hmmmgames.dungroll.DungeonRollcall' attempting to access 'com.hmmmgames.dungroll.creatures.Creature')
jin attempt to invoke virtual method java.lang.String com.hmmmgames.dungroll.creatures.Creature.myid()
j(declaration of 'com.hmmmgames.dungroll.DungeonRollcall' appears in /data/app/com.hmmmgames.dungroll-1/base.apk)
06-25 22:38:02.730 14459 14484 E AndroidRuntime at com.hmmmgames.dungroll.DungeonRollcall.add(DungeonRollcall.java:102)
Please, how do I fix?
Creature.java(summarized)
Code:
class Creature
{
public static class Action {
public String name;
}
public static final int ME = -1;
public static final int MY_CLAN_FRIEND = 1;
public static final int MY_FOREIGN_FRIEND = 2;
public static final int MY_CLAN = 3;
public static final int MY_CLAN_ALLY = 4;
public static final int UNKNOWN_CREATURE = 5;
public static final int UNKNOWN_CLAN = 6;
public static final int MY_CLAN_ENEMY = 7;
public static final int MY_FOREIGN_ENEMY = 8;
public static final int ENEMY_CLAN = 9;
public static final int TOTAL_TARGETS = 9;
public Map<String, Double> stats;
public Map<String, Double> liking;
//holds knowledge of what each creature is doing
//can be outdated... that's the fun :P.
//Some may choose to tell you knowledge or not.
public Map<String, String> knowledge;
public String name;
public ClanWrap clan;
public GroupWrap group;
public GroupWrap previousGroup;
public CreatureWrap target;
public boolean toKill = false;
public boolean isFighting = false;
public boolean retreating = false;
public double startingEnemyHealth;
//use this to find action of creature
//creature.name+action
public String action;
public int rampageTime = 0;
public int regard = 0;
public double startingHealth = 0;
public String currentAction = "";
public String pendingAction = "";
public DungeonRoomWrap currentRoom;
public ArrayList<Clan.Surname> bloodline;
private double movingProgress;
public static String[] tactical = {"wisdom","patience","sanity"};
public boolean played = false;
private String uuid;
public String myid() {
return uuid;
}
public Creature(Group parentGroup) {
group = new GroupWrap(parentGroup);
clan = new ClanWrap(group.get().clan.get());
liking = new HashMap<>();
bloodline = new ArrayList<>();
stats = new HashMap<>();
knowledge = new HashMap<>();
uuid = DungeonRollcall.uuid();
DungeonRollcall.add(this);
}
DungeonRollcall.java
Code:
}
public static boolean add(Creature data) {
//assert(allCreatures.containsKey(data.myid()));
log(DungeonRollcall.class.getClassLoader().toString());
log(Clan.class.getClassLoader().toString());
log(Creature.class.getClassLoader().toString());
allCreatures.put(data.myid(), data);
addedData = true;
return true;
}
public static boolean add(Group data) {
assert(allGroups.containsKey(data.uuid));
allGroups.put(data.uuid, data);
addedData = true;
return true;
}
public static boolean add(Clan data) {
assert(allClans.containsKey(data.uuid));
allClans.put(data.uuid, data);
addedData = true;
return true;
}
public static boolean add(DungeonRoom data) {
assert(allDungeonRooms.containsKey(data.uuid));
allDungeonRooms.put(data.uuid, data);
addedData = true;
return true;
}
public static boolean add(DungeonFloor data) {
assert(allDungeonFloors.containsKey(data.uuid));
allDungeonFloors.put(data.uuid, data);
addedData = true;
return true;
}
public static String uuid() {
if (!addedData) {
assert(false);
log("old UUID not used");
}
addedData = false;
return UUID.randomUUID().toString();
}
}
I've tried making uuid field public before, it didn't work. Also removed getter, still didn't work. Can still access toString() of Creature from DungeonRollcall. Why? Please how do I fix?
Last edited by VictorN; June 26th, 2021 at 06:53 AM.
Reason: Inserted line breaks in the error message
-
June 26th, 2021, 08:42 AM
#2
Re: IllegalAccessError, cannot acces class
The posted code looks like it should work. Are there other versions of the Creature class where myid() was not public?
Norm
-
June 26th, 2021, 09:54 AM
#3
Re: IllegalAccessError, cannot acces class
Does the Creature class need to be instantiated through a derived class?
-
June 26th, 2021, 02:07 PM
#4
Re: IllegalAccessError, cannot acces class
No, the previous version had a public uuid and no myid, so I thought myid getter might work, the version before that had no uuid. And creature is not gotten through derivative and is not used as one. I tried this on another device that had not used java before, where no dex or class or system files could be loaded, still got error.
-
June 26th, 2021, 02:19 PM
#5
Re: IllegalAccessError, cannot acces class
It cannot access other things like currentAction, but can access stuff all classes have like toString.
And I find it strange it says virtual method? Doesn't that mean that the instance is null?(Couldn't edit)
-
June 26th, 2021, 02:36 PM
#6
Re: IllegalAccessError, cannot acces class
Did you do a clean and a full rebuild?
Try making the Creature class public.
Last edited by Norm; June 26th, 2021 at 03:15 PM.
Norm
-
June 27th, 2021, 04:29 AM
#7
Re: IllegalAccessError, cannot acces class
Originally Posted by Norm
Did you do a clean and a full rebuild?
Try making the Creature class public.
Yes I did a full rebuild, but Norm....
Norm... ... ... ... Norm...public class Creature...I must have forgotten the public when I typed.... ...
...
I CAN'T BELIEVE I DIDN'T SEE IT! I SEARCHED FOR HOURS BEFORE POSTING THIS THREAD! THANK YOU!!!!!!!!!!!!!!!
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|