Gå til innhold

[Løst]Eclipse produserer classname($n).class-filer


Anbefalte innlegg

Skrevet (endret)

Jeg la merke til at det i jarfilene jeg lagde fra Eclipse var med en del underlige filer, og når jeg tittet i workspace'et så jeg at de lå der også. De heter classname$1.class, classname$2.class o.l.

 

Disse blir automatisk med når jeg lager JAR-fila, og jeg kan ikke fjerne dem (hvis jeg fjerner dem fra workspace klikker Eclipse, og JAR-filene vil ikke kjøre hvis jeg fjerner dem med 7-zip.

 

 

Hva slags filer er dette?

Endret av Kagee
Videoannonse
Annonse
Skrevet (endret)

Hvis du har anonyme innerclasses så får du class-filer av denne sorten. Du skal med andre ord IKKE fjerne dem.

 

Edit: Det er IKKE eclipse som produserer dem, men javakompilatoren.

 

Werner

Endret av wernie
Skrevet (endret)

Nydelig svar, bare et problem: Jeg er nybegynner, og kjenner ikke til begrepet "anonyme innerklasser".

 

Ikke tror jeg at jeg bruker dem heller....

 

Edit: Googlet det ... stemmer det at jeg opretter en "anonym innerklasse" hver gang jeg bruker "new"? I så fall er jo disse filene et krav med en gang man bruker Swing o.l ....

Endret av Kagee
Skrevet

Nei, men lager du en lytter, kan du implementere den på måten ala dette:

knapp.addActionListener(new ActionListener() {
       public void actionPerformed( ActionEvent e ) {
           gjoerDetteNaarKnappTrykkes();
       }
   }
);

Skrevet

Mellom linje 65 og 85 er en klasse av typen ActionListener, og en annen mellom 92 og 97. Som du ser lages disse ved:

<objekt>.<metode>(new <klassenavn>() { //variabler og metoder });

der "//variabler og metoder" er koden til den anonyme klassen av <klassenavn> er. Alternativt kunne du laget en egen klasse, dersom <klassenavn> er ActionListener som her:

class Lytter implements ActionListener {

//samme kode, public void actionPerformed(ActionEvent e) må implementeres

}

og skrevet i stedet:

<objekt>.<metode>(new Lytter());

 

Håper det hjalp :)

Skrevet (endret)
Jeg skjønte ikke helt hva du svarte på, men jeg gjorde som du foreslo.

 

Har fortsatt filene (hadde vært fint uten)

 

Kan noen forklare med hva disse anonyme klassene er, eventuelt peke de ut her:

http://diskusjon.no.pastebin.com/925505

8820412[/snapback]

Det jeg «foreslo» var hvordan en anonym indre klasse skrives. Som du ser, har den ikke noe navn.

 

Hvorfor vil du kvitte deg med filene? .class-filene er helt nødvendig for å kjøre programmet, jeg skjønner ikke hva problemet er.

 

Men du kan selvsagt gjøre alle anonyme indre klasser til vanlige eksterne lyttere. Da må du lage en klasse på denne måten:

class MinLytter implements ActionListener {
  public void actionPerformed(ActionEvent e) {
     denneMetodenSkalGjoeres();
  }
}

Og så må du legge de til på knappen slik:

knapp.addActionListener(new MinLytter());

,

 

Du må nok eksperimentere litt med konstruktører og referanser til objekter for å få det til å virke på samme måte, men det er ikke noe problem.

Endret av pgd

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...