Avatar billede danino Nybegynder
16. marts 2004 - 18:02 Der er 29 kommentarer og
1 løsning

Repaint problem

Jeg er lige begyndt med java, og har fundet en tutorial med opgaver. I denne opgave skal jeg lave et ur, der opdateres hvert sekund, men den vil ikke som jeg vil.
Jeg har denne kode:
public class VisUr
{
  public static void main(String[] arg)
  {
    Digitalur vindue = new Digitalur();
    vindue.setSize(350,125);                      // sæt vinduets størrelse
    vindue.setLocation(200, 300);                  // sæt vinduet position
    vindue.setTitle("Mit første digitalur :-)");  // sæt vinduets titel
    vindue.setVisible(true);                      // åbn vinduet
    vindue.repaint(1000);
  }
}
Men den opdaterer ikke uret (dvs. måske opdaterer den én gang næsten inden vinduet er åbnet). Jeg har prøvet at at smide vindue.repaint(1000); ind i en for-løkke, der talte til 1000, men så opdaterede den helt vildt hurtigt, og ikke med et sekund imellem.

Håber nogen kan hjælpe.
Avatar billede vanalten Nybegynder
16. marts 2004 - 18:26 #1
Hvad med at koere en timer paa det, saa ledes
Timer t = new Timer(1000, listner), hvor listner er en actionlistner der soerger faar at repainte dit ur, det burde virke.
Avatar billede danino Nybegynder
16. marts 2004 - 19:53 #2
øh.... en actionlistener siger du?? hvad er så det? :-)
I den tutorial jeg følger, påstår de, at det kan lade sig gøre med repaint().
Tutorialen er her: http://javabog.dk/OOP/kapitel9.html#afsn9.3
opgave 2
Avatar billede _carsten Nybegynder
16. marts 2004 - 20:32 #3
Det de mener er at du skal kalde repaint() fra paint()

Det betyder at skal implementere repaint() i paint()

Altså
I et eller andet object(står sikkert højere oppe i opgaven - har ikke læst den) er der sikkert beskrevet hvordan du overrider paint()

Løsningen ser sådan ud

public void paint(java.awt.Graphics g){
  repaint(1000);
}
Avatar billede _carsten Nybegynder
16. marts 2004 - 20:34 #4
Du har den jo faktisk i eks 9.2.1
Avatar billede danino Nybegynder
16. marts 2004 - 20:40 #5
Ja, men det synes jeg også jeg gjorde i starten, og det virkede ikke.. Nå, men nu siger den at der er en fejl her:
public class VisUr
{
  public static void main(String[] arg)
  {
    Digitalur vindue = new Digitalur();
    vindue.setSize(350,125);                      // sæt vinduets størrelse
    vindue.setLocation(200, 300);                  // sæt vinduet position
    vindue.setTitle("Mit første digitalur :-)");  // sæt vinduets titel
    vindue.setVisible(true);                      // åbn vinduet
  }
}
Den siger cannot resolve symbol, og peger på det store D i Digitalur... Ved du også hvad det nu skyldes? :) ... ved godt jeg er besværlig, men jeg er lige begyndt, og forstår ikke så meget java endnu... :)
Avatar billede _carsten Nybegynder
16. marts 2004 - 20:45 #6
Lad os starte med det sidste først:
Du er IKKE besværlig, det er en naturlig ting at java ikke kan læres på et par dage
det er rimelig omfattende !

Det skyldes at den ikke kan finde klassen:  Digitalur
Enten ligger den ikke i samme package, eller du har ikke lavet den endnu.
Avatar billede danino Nybegynder
16. marts 2004 - 20:48 #7
Jeg har skam lavet den, og compilet den. Og den ligger i samme dir... Det virkede fint lige før, men nu tilføjede jeg repaint(), og så kom problemet... Hvis du skal bruge koden til Digitalur er den her:
import java.awt.*;
import java.util.*;

public class Digitalur extends Frame
{
  public void paint(Graphics g)
  {
    // Herunder referer g til et Graphics-objekt man kan tegne med.
       
    g.setColor(Color.blue);
    g.fillRoundRect(15,35,320,70,25,25);
    Date d = new Date();
    String s = d.toString();
       
    //g.fillOval(5,35,300,30);

    g.setColor(Color.yellow);

    g.drawString(s,95,75);
   
    repaint(1000);
  }
}
Avatar billede _carsten Nybegynder
16. marts 2004 - 20:57 #8
Det kan ikke være rigtigt - check lige endnu engang at Digitalur eksisterer
Avatar billede danino Nybegynder
16. marts 2004 - 21:02 #9
Jamen den eksisterer skam. Men jeg kan køre programmet, hvis jeg skriver:
java -cp . VisUr
Det læste jeg i et andet spørgsmål at man kunne skrive, og at man ikke behøvede det ekstra, hvis man tilføjede det dir man bruger til ens classpath i "enviroment variables" ... det gjorde jeg så tidligere, men efter at min computer har været slukket, er det ligesom om det er "gået væk". Dog er min classpath som det jeg ændrede den til i eftermiddags... Meget mærkeligt. Jeg ved ikke om du kan give mig svaret på det, ellers så bare læg et svar, så får du points, for du svarede jo på mit spørgsmål.
Avatar billede _carsten Nybegynder
16. marts 2004 - 21:16 #10
Det er nødvendigt for at finde program og compiler
Hvis du ikke specifikt har sat din classpath i miljøvariablerne (eller autoexec) vil den forsvinde, og det var måske smart at gøre her til at begynde med, så det ikke går i kage p.g.a. den slags
Avatar billede _carsten Nybegynder
16. marts 2004 - 21:20 #11
Der er en rimelig/fornuftig beskrivelse af hvad og hvorfor her
http://java.sun.com/j2se/1.4.2/docs/tooldocs/solaris/classpath.html
Avatar billede danino Nybegynder
16. marts 2004 - 22:04 #12
Jamen jeg har netop sat classpath til mit arbejdsdir, for at undgå at skrive det. Og det står stadig i classpath, men den reagerer som om det ikke står der mere...

Her er dine points...
Avatar billede _carsten Nybegynder
16. marts 2004 - 22:25 #13
Til dit "arbejdsdir"

Du skal også sætte classpath i dit "java installationsdir\bin"

Noget a la:    .;C:\j2sdk\bin
Så ruller det
Avatar billede danino Nybegynder
16. marts 2004 - 22:27 #14
ja, det ved jeg godt, og det har jeg også gjort... Men jeg havde en j2ee version af java fandt jeg ud af...  jeg ved ikke om det har nogen indflydelse, men nu er jeg ved at hente den normale version (j2se)...

Men tak for hjælpen :)
Avatar billede _carsten Nybegynder
16. marts 2004 - 22:31 #15
Det ved jeg faktisk ikke, holder mig til j2se lidt endnu - selvom man ikke kan nøjes med det.
Avatar billede danino Nybegynder
16. marts 2004 - 22:37 #16
Nu har jeg installeret j2se og tilføjet det i classpath, men den vil stadig ikke compile VisUr.java , men godt Digitalur.java
Den siger stadig fejl i VisUr ved D i Digitalur her i linje 5 (som starte med Digitalur vindue...):
public class VisUr
{
  public static void main(String[] arg)
  {
    Digitalur vindue = new Digitalur();
    vindue.setSize(350,125);                      // sæt vinduets størrelse
    vindue.setLocation(200, 300);                  // sæt vinduet position
    vindue.setTitle("Mit første digitalur :-)");  // sæt vinduets titel
    vindue.setVisible(true);                      // åbn vinduet
  }
}
Avatar billede _carsten Nybegynder
16. marts 2004 - 22:40 #17
Har du genstartet, hvilken os bruger du ?
Avatar billede danino Nybegynder
16. marts 2004 - 22:41 #18
Nej, det har jeg forresten ikke.. prøver lige... jeg har winXP...
Avatar billede danino Nybegynder
16. marts 2004 - 22:49 #19
Det virker stadig ikke, men når jeg compiler med
javac -classpath . VisUr.java
kan den godt, men når jeg så vil køre programmet, og skriver
java VisUr
Så skriver den:
Exception in thread "main" java.lang.NoClassDefFoundError: VisUr
Avatar billede _carsten Nybegynder
16. marts 2004 - 22:52 #20
Sætter du classpath via
Højreklik på Denne Computer > Egenskaber > avanceret > Miljøvariabler  ?
Avatar billede danino Nybegynder
16. marts 2004 - 22:54 #21
ja, det gør jeg...
Avatar billede danino Nybegynder
16. marts 2004 - 22:54 #22
præcis som i den guide, som du gav et link til... Jeg forstår det ikke... :(
Avatar billede _carsten Nybegynder
16. marts 2004 - 23:01 #23
Har du husket det ret så vigtige punktum og semikolon

a la:  .;c:\j2sdk\bin
Avatar billede danino Nybegynder
16. marts 2004 - 23:05 #24
nej, jeg havde ikke fået punktum'et med, men det ændrede ikke noget... :(
Avatar billede _carsten Nybegynder
16. marts 2004 - 23:09 #25
Det er vist mig som er tung i rø...

Ind i miljøvariabler igen og opret en varibel som hedder CLASSPATH med værdien . altså punktum

Ellers vender jeg tilbage i morgen
Avatar billede danino Nybegynder
16. marts 2004 - 23:10 #26
Skal der kun stå punktum? Nu står der jo også en masse andet?
Måske kan du maile mig på danino @ stofaet . dk ?
Avatar billede danino Nybegynder
16. marts 2004 - 23:13 #27
det skulle så være:
danino @ stofanet . dk :)
Avatar billede _carsten Nybegynder
16. marts 2004 - 23:16 #28
Ja - kun punktum
Du trykker på knappen "Ny"

Variabelnavn:  CLASSPATH

Variabelværdi:  .
Avatar billede danino Nybegynder
17. marts 2004 - 16:49 #29
Hey... Det virker nu... Nu har du jo været flink og hjælpe med et andet problem, så skal jeg ikke oprette et spørgsmål, så du kan få points for det...
Men du skal i hvert fald have mange tak for din ihærdighed i at hjælpe!!
Avatar billede _carsten Nybegynder
17. marts 2004 - 19:20 #30
Nej - antal point er OK

Jeg var jo åbenbart selv lidt rusten i den del af det, så det var vist på sin plads at få det frisket lidt op igen.

Fortsat god vind !
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