Lasse Reichstein Nielsen wrote:
>
> Hvis du kunne skære dit problem ned til et lille stykke kørende kode
> der viser det, så vil det være meget nemmere at se fejlen.
> <URL:
http://www.physci.org/codes/sscce.jsp>
Desværre, det kan jeg ikke.
>
> Du nævner senere at problemet sker ved kald til "funktionen"
> AddTSB. Jeg kan ikke se en funktion der hedder AddTSB, men en
> konstruktor. Hvor er den klasse definieret? Er det den koden
> ligger i?
Ja, det var så addTSB jeg mente.
>
>
>>private void tsbAddButtonPressedAction() {
>> AddTSB addTSB = new AddTSB(frame) {
>
>
> Her laver du en ny variabel af type AddTSB, men bruger den ikke til
> noget.
Joda, bruger den ganske meget, det er en extention af JDialog. Brugeren
trykker på en knap der hedder Add TSB og dermed instantierer jeg
AddTSB(frame).
>
>>Exception occurred during event dispatching:
>>java.lang.NullPointerException
>> at gui.AddTSA.access$10(AddTSA.java:283)
>
>
> Ok, så fejlen sker i metoden "access$10" i klassen "AddTSA".
> Dollar-tegent tyder på at det er en genereret metode, sikkert noget
> med en indre klasses, så du kan ikke finde den i din kode.
Ja, så langt er jeg også kommet selv, mit spørgsmål kunne vel også
omformuleres til "hvad står der EGENTLIG i linie 283 ??" :)
>
>
>>Stacktracet er selvfølgelig længere end dette.
>
>
> Ja, og hvad er der på de næste få linjer? Når den funktion jo netop
> ikke findes.
>
Resten af stacktracet er ikke interessant, det sporer udelukkende selve
knap-trykket, det har ingen indflydelse.
>
> Metoden henviser til variablen "mAnalysis", som vi ikke kan se.
> Ligger den i samme klasse eller (gætter jeg på) i en omsluttende
> klasse, som addTSB-metodens klasse er en indre klasse i?
>
mAnalysis er bare en slags datacontainer, har ikke nogle spøjse
fuktioner. Det mest ophidsende er en add() til en Vector.
Referencen til mAnalysis-objektet ligger i den klasse der instantierer
AddTSB.
> Hvis det er det sidste, så bliver det compilet så den indre klasse er
> en klasse for sig selv, og den skal tilgå feltet i den omsluttende
> klasse som alle andre felter i andre klasser. For at omgå at det måske
> er privat, så er der genereret nogle nye "hemmelige" access-metoder,
> og jeg gætter på at det er kaldet af sådan en der fejler.
mAnalysis bliver ikke tilgået fra konkretiseringen af den abstrakte
metode, det eneste der sker her er, at objektet tsb af typen TSB bliver
brugt som parameter til funktionen addTSB(TSB tsb) .. og det er dét der
går galt.
Hvordan er det nu liiiige det er med indre klassers adgang til den
omsluttende klasses felter og metoder? Mener der er nogle begrænsninger,
men det er vel noget der afsløres ved kompileringstidspunktet? Det her
vil i hvert fald gerne kompilere:
public class Test {
private Object obj;
private void fii() {
}
public Test() {
obj = new Object();
AbstractTest absTest = new AbstractTest() {
public void foo() {
obj.getClass();
fii();
}
};
}
}
public abstract class AbstractTest {
public abstract void foo();
}
>
> Mere kode, ellers bliver det rent gætværk
>
Jeg har lavet et mere overskueligt eksempel på problemet andetsteds i
denne tråd. Indtil videre tak for dine kommentarer. Det er klart, at det
er noget med scopet på objektet tsb der er forkert. Det eksisterer i
bedste velgående inde i konkretiseringen af den abstrakte metode, men
kan åbenbart ikke refereres/parametiseres udenfor denne. Som sagt har
jeg fundet løsningen på problemet, men ikke fået defineret årsagen.
Løsningen kan du også se i det mere overskuelige eksempel.
> /L
/J :)
--
Kids, try this at home:
http://www.legendsrpg.net/index.php?refid=799