Avatar billede nanders Nybegynder
07. september 2003 - 11:33 Der er 41 kommentarer og
1 løsning

Hente Crayon ?

Kære Eksperter,

Jeg har lavet en klasse der skal bruge Crayon til at tegne med.

Crayon klassen ligger i samme underbibliotek så at jeg kan bruge den, jeg kan bare ikke oprette min statistiker.

Jeg får fejlen: No Class definition found
null.

Det er linjen:

private Crayon c = new Crayon();

der giver problemer.

Er der nogen der ved hvad problemet er. Uden ovenstående linje fungerer programmet fint.

/**
* Write a description of class statistiker here.
*
* @author (your name)
* @version (a version number or a date)
*/

import java.awt.*;

public class statistiker
   
    {
 
    private int enere,toere,treere,firere,femere,seksere;
    private int antalSlag;
 
    private Crayon c = new Crayon();
    terning t1 = new terning();

    /**
    * Her udføres eksperimentet: slå med antalforsøg terninger.
   
    */
    public void udførEksperiment(int antalSlag) {
       
    for(int i = 1; i <= antalSlag; i++) {
   
    t1.kast();
   
    if (t1.antalØjne() == 1)
    {
    enere = enere + 1;
    }
    if (t1.antalØjne() == 2)
    {
    toere = toere + 1;
    }
    if (t1.antalØjne() == 3)
    {
    treere = treere + 1;
    }
    if (t1.antalØjne() == 4)
    {
    firere = firere + 1;
    }
    if (t1.antalØjne() == 5)
    {
    femere = femere + 1;
    }
    if (t1.antalØjne() == 6)
    {
    seksere = seksere + 1;
    }
   
    } 
   
    System.out.println("Antal enere er= " + enere);
    System.out.println("Antal toere er= " + toere);
    System.out.println("Antal treere er= " + treere);
    System.out.println("Antal firere er= " + firere);
    System.out.println("Antal femere er= " + femere);
    System.out.println("Antal seksere er= " + seksere);
   
    c.move(enere);
   
  }
}

Med venlig hilsen

nanders
Avatar billede arne_v Ekspert
07. september 2003 - 11:37 #1
Gæt: Crayon ligger i en klasse.

Og skal derfor flyttes til et passende subdirectory og din kode skal have en
import.
Avatar billede nanders Nybegynder
07. september 2003 - 11:39 #2
Hej Arne,

Det er sikkert rigtigt - men ligger det hele ikke i mit import java.awt.*; ?

Eller er der en anden kommando jeg skal bruge.

Crayon klassen ligger i samme bibliotek.
Avatar billede nanders Nybegynder
07. september 2003 - 12:03 #3
Deb skriver, når jeg prøver at oprette et statistiker objekt:

The method finished through an explicit "exit" instruction. No result was returned.
Avatar billede arne_v Ekspert
07. september 2003 - 12:42 #4
import java.awt.*;

importerer kun java.awt pakken - jeg formoder at Crayon ikke
ligger i den.

Og directory struktur skal matche pakke struktur.
Avatar billede nanders Nybegynder
07. september 2003 - 16:16 #5
Hej Arne,

Mine kundskaber er ikke gode nok til at forstå det du skriver.

Hvis jeg har mine to klasser - terning og statistiker - hvordan kan jeg så anvende de metoder, der findes i en klasse crayon, som jeg kan finde ude på nettet ?
Avatar billede arne_v Ekspert
07. september 2003 - 16:21 #6
Er der en linie med:

package et-eller-andet;

i filen ?
Avatar billede arne_v Ekspert
07. september 2003 - 16:24 #7
Altså i Crayon.java
Avatar billede nanders Nybegynder
07. september 2003 - 16:34 #8
Hej Arne,

Nedenfor er Crayon.java - der er ikke noget med package.

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;

public class Crayon {
  private static Board b = new Board();
  private Color col;
  private double width;
  private double dir = 0;
  private double pos_x = 0;
  private double pos_y = 0;

  private static class Board extends JPanel {
    private Vector lines = new Vector();

    private static class LineSegment {
      Color col;
      Polygon pol;

      LineSegment(Color c, Polygon p) { col = c; pol = p; }
    }

    public Board() {
      JFrame frame = new JFrame();
      frame.setContentPane(this);
      this.setPreferredSize(new Dimension(400, 500));
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.show();
    }
   
    public void erase() {
      lines.clear();
      repaint();
    }
   
    public void addLine(Color c, double w, double cos, double sin,
                        double x1, double y1, double x2, double y2) {
      Polygon p = new Polygon();
      p.addPoint((int) (x1-w/2*sin),(int) (y1+w/2*cos));
      p.addPoint((int) (x1+w/2*sin),(int) (y1-w/2*cos));
      p.addPoint((int) (x2+w/2*sin),(int) (y2-w/2*cos));
      p.addPoint((int) (x2-w/2*sin),(int) (y2+w/2*cos));
      lines.addElement(new LineSegment(c,p));
      repaint();
    }

    public void paintComponent(Graphics g) {
      super.paintComponent(g);
      g.clearRect(0,0,400,500);
      Enumeration lss = lines.elements();
      while (lss.hasMoreElements()) {
        LineSegment ls = (LineSegment) lss.nextElement();
        g.setColor(ls.col);
        g.fillPolygon(ls.pol);
      }
    }
  }
 
  public Crayon(Color c, double w) {
    col = c;  width = w;
  }

  public Crayon() {
    this(Color.black,1);
  }


  public void move(double d) {
    double cos = Math.cos(dir*Math.PI/180);
    double sin = Math.sin(dir*Math.PI/180);
    double new_x = pos_x + d*cos;
    double new_y = pos_y + d*sin;
    b.addLine(col,width,cos,sin,pos_x,pos_y,new_x,new_y);
    pos_x = new_x;  pos_y = new_y;
  }

  public void moveto(double x, double y) {
    double cos = (x-pos_x) / Math.sqrt ((x-pos_x)*(x-pos_x)+(y-pos_y)*(y-pos_y));
    double sin = (y-pos_y) / Math.sqrt ((x-pos_x)*(x-pos_x)+(y-pos_y)*(y-pos_y));
    b.addLine(col,width,cos,sin,pos_x,pos_y,x,y);
    pos_x = x;  pos_y = y;
  }

  public void jump(double d) {
    pos_x = pos_x + d*Math.cos(dir*Math.PI/180);
    pos_y = pos_y + d*Math.sin(dir*Math.PI/180);
  }

  public void jumpto(double x, double y) {
    pos_x = x;  pos_y = y;
  }

  public void turn(double a) {
    dir = (dir + a) % 360;
  }

  public void turnto(double a) {
    dir = a % 360;
  }
 
  public void erase() {
    b.erase();
  }
}
Avatar billede arne_v Ekspert
07. september 2003 - 16:38 #9
Så bør den compile når den ligger i samme directory som dine klasser.


javac -classpath . Crayon.java
javac -classpath . terning.java
javac -classpath . statistiker.java
Avatar billede nanders Nybegynder
07. september 2003 - 16:40 #10
Hej Arne,

Jeg tror jeg bliver nødt til at lave det hele forfra.

Jeg kører med 2 systemet - både BlueJ og NetBeans .

Jeg tror ikke jeg kan håndtere begge dele samtidigt.
Avatar billede arne_v Ekspert
07. september 2003 - 16:44 #11
Det kræver erfaring om lidt finger spitz gefuhl at bruge 2 IDE'er
på samme projekt.

*MEN* du behøver jo ikke lave ret meget.

Lav et nyt projekt. Lav en top source fil. copys paste den kode du allerede
har ind.
Avatar billede arne_v Ekspert
07. september 2003 - 16:44 #12
tom source fil
Avatar billede nanders Nybegynder
07. september 2003 - 16:52 #13
Hej Arne,

pyh ha.

Nu har jeg en fil med mine tre klasser i BlueJ.  Vistnok uden at jeg har blandet NetBeans ind i det.

Problemet er, tror jeg, at når jeg henter noget fra nettet gør min PC automatisk det jeg henter til en NetBeans fil.
Avatar billede arne_v Ekspert
07. september 2003 - 16:55 #14
Du har forhåbentlig 3 filer med hver deres klasse ??
Avatar billede nanders Nybegynder
07. september 2003 - 17:02 #15
Nej, alle tre klasser ligger i et filnavn.

Når jeg åbner filen får jeg en grafisk afbildning af de tre klasser.

Jeg tror de er gemt inde i samme fil.
Avatar billede nanders Nybegynder
07. september 2003 - 17:03 #16
Det jeg gemmer dem i kaldes et projekt - tror jeg.
Avatar billede arne_v Ekspert
07. september 2003 - 17:17 #17
1 projekt med 3 file/klasser er helt fint.

Virker det nu ?
Avatar billede nanders Nybegynder
07. september 2003 - 17:27 #18
Hej Arne,

Ja det virker nu.

Nu skal jeg bare bruge noget så jeg kan tegne min statistiske undersøgelse.

På kurset har vi den crayon der skal bruges til det.

Den er på http://www.daimi.au.dk/dIntProg/eksempler/opg1.2.2/drawer/

- men den skal ind i min maskine - og jeg tror det der gør at jeg ikke kan få den til at virke er, at jeg får den downloadet som en netbeans fil - fordi netbeans er min default IDE
Avatar billede arne_v Ekspert
07. september 2003 - 17:30 #19
Kan du ikke bare åbne den i din browser, lave en tom klasse i din IDE og
så copy paste fra browser til IDE ?
Avatar billede nanders Nybegynder
07. september 2003 - 17:35 #20
Har prøvet det,

Når jeg gør det går compileren amok med alskens uforståelige fejlmeddelelser når jeg i min statistiker skriver

private Crayon d = new Crayon();

eller bare Crayon d = new Crayon();

Jeg går ud fra, at det ville være den der hedder Crayon.class jeg skal åbne og lægge den ind i min tomme klasse
Avatar billede arne_v Ekspert
07. september 2003 - 17:38 #21
Nej.

Crayon.java

.java = source
.class = oversat
Avatar billede arne_v Ekspert
07. september 2003 - 17:38 #22
Men start med at få gemt Crayon og se at den compiler.

Inden du går igang med at bruge den fra din kode.
Avatar billede nanders Nybegynder
07. september 2003 - 17:40 #23
Den vil ikke compile crayon, da crayon class øjensynligt indeholder noget som gør den umulig at compile.

Det er sikkert noget som crayon.class har fra en anden fil der ligger i en anden klasse.
Avatar billede nanders Nybegynder
07. september 2003 - 17:44 #24
I opgave står der direkte:

Lad statistikeren benytte et passende antal farvekridt (Crayon) til at producere histogrammet.
Avatar billede arne_v Ekspert
07. september 2003 - 17:44 #25
Nope.

Jge har lige hentet Crayon.java og den compiler i første forsøg hos mig.
Avatar billede nanders Nybegynder
07. september 2003 - 17:47 #26
Er det ikke crayon.class jeg skal kopiere ind ?
Avatar billede arne_v Ekspert
07. september 2003 - 17:51 #27
Nej.

Hent Crayon.java og compile den (så får du en Crayon.class).
Avatar billede nanders Nybegynder
07. september 2003 - 17:53 #28
Når jeg kompilerer den går det

a) galt i netbeans med fejlmeddelelsen:

java.lang.NoClassDefFoundError: Crayon[1]
Exception in thread "main" 

i BlueJ har den ikke kompileret færdig efter 5 minutter
Avatar billede nanders Nybegynder
07. september 2003 - 17:59 #29
Jeg har imidlertid prøvet at compile den i en hel ny fil - og her vil den gerne compile
Avatar billede arne_v Ekspert
07. september 2003 - 18:02 #30
Suk.

Der er et eller andet som er helt kokset i opsætningen.

Kan du poste dir & fil struktur for projektet ?
Avatar billede nanders Nybegynder
07. september 2003 - 18:03 #31
Nu fik jeg den ind i det rigtige bibliotek og compilet den.

Den accepeterer (kompiler) tilføjelserne:

private Crayon d = new Crayon();
og senere d.move(enere)




d.move(enere);
Avatar billede nanders Nybegynder
07. september 2003 - 18:08 #32
Men når jeg vil have programmet til at køre gør den stadig vrøvl.

Jeg ved ikke hvordan jeg kan poste en dir filstruktur.

Den crayon.java jeg kan kompile har jeg kaldt tegn, og den ligger i samme directory som statistiker og terning.
Avatar billede nanders Nybegynder
07. september 2003 - 18:13 #33
Så snart at linjen  d.move(enere);

Crayon d = new Crayon()  d.move(enere);
   
har jeg fejlen, når jeg vile objektet statistiker, at

NoClassDefFound
null
Avatar billede nanders Nybegynder
07. september 2003 - 18:15 #34
Det sidste var vist ret så uforståeligt.

Så snart at linjen:

Crayon d = new Crayon()

tilføjes i statistiker har jeg fejlen

NoClassDefFound
null
Avatar billede arne_v Ekspert
07. september 2003 - 18:41 #35
Man kan lave en:
  DIR > dir.txt

i directory for at se directory struktur.
Avatar billede arne_v Ekspert
07. september 2003 - 18:43 #36
Det kunne altså være sjovt at prøve at compile rog køre manuelt
i en DOS box, fordi det vil give nogl bedre fejlmeddelser.
Avatar billede nanders Nybegynder
07. september 2003 - 18:47 #37
Hej Arne

Ikke en gang det fatter jeg.

I mit XP er det ikke umiddelbart muligt at skrive DIR > dir.txt nogle steder så at PC'en fatter det.
Avatar billede nanders Nybegynder
07. september 2003 - 18:52 #38
Kære Arne,

Jeg vil sige mange mange tak fordi du har gidet hjælpe mig.

Jeg tror dog jeg vil prøve at bede min instruktor om grundigt at forklare hvordan man kan programmere i Java på en windows baseret PC, hvor der i forvejen er installeret andre IDE'er.

Dernæst hvordan man importerer filer fra internettet til sin PC uden der går ged i det.

Med venlig hilsen

nanders
Avatar billede nanders Nybegynder
07. september 2003 - 18:53 #39
NB Hvis du vil have pointene kan du bare sende et svar.

Så får du dem i morgen
Avatar billede arne_v Ekspert
07. september 2003 - 19:11 #40
Du kan vel åbne en DOS box og bruge DIR kommandoen i den ??
Avatar billede arne_v Ekspert
07. september 2003 - 19:11 #41
Jeg tror at det kun er en lile ting der driller.

Men det er svært at sige hvad, når man ikke er ved PC'en.
Avatar billede arne_v Ekspert
07. september 2003 - 19:12 #42
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester