Avatar billede stephanryer Nybegynder
10. november 2004 - 16:59 Der er 14 kommentarer og
1 løsning

Timer: Forklaring af nogle ting omkring timer pls (til Arne)

__________________________________________________________
package timer;

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

public class BlackAndWhite extends JFrame implements ActionListener {
  private static boolean black;
  public BlackAndWhite() {
      black = true;
      getContentPane().setBackground(black ? Color.black : Color.white);
      setSize(100, 100);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      (new Timer(2000, this)).start();
  }
  public void actionPerformed(ActionEvent evt) {
      black = !black;
      getContentPane().setBackground(black ? Color.black : Color.white);
  }
  public static void main(String[] args) {
      BlackAndWhite f = new BlackAndWhite();
      f.setVisible(true);
  }
}
__________________________________________________________

Hey, jeg har nogle spørgsmål til denne fil.

Jeg ser at objektet har en timer indbygget. Denne timer, tæller den konstant selvom man ikke kalder objektet fra main ?

Og mht til denne linie:
(new Timer(2000, this)).start();

hvis jeg har forstået det rigtigt så opdaterer ojektet sig selv (this) hvert 2000. millisekund. Men det timeren opdaterer/refresher er det altid bare det der står under actionPerformed i samme klasse??
Avatar billede arne_v Ekspert
10. november 2004 - 17:55 #1
(new Timer(2000, this)).start();

starter en tråd som hver 2000. millisekund kalder actionPerformed i this
Avatar billede arne_v Ekspert
10. november 2004 - 17:56 #2
Der sker først noget når linien udføres d.v.s. når constructoren kaldes, men
så kører den også uafhængigt af hvad der ellers sker i GUI'en.
Avatar billede arne_v Ekspert
10. november 2004 - 17:57 #3
I et mere realistisk eksempel ville man nok gemme en reference til timeren for at
kunne stoppe den m.v.
Avatar billede stephanryer Nybegynder
10. november 2004 - 18:23 #4
ja ok, men dvs at uanset om det er inde i et objekt i et objekt i et andet objekt, så vil en startet timer køre uafhængigt af alt andet indtil den stopper?
Avatar billede arne_v Ekspert
10. november 2004 - 18:26 #5
Ja. Du kunne sagtens lave et seperat objekt med en actionPerformed metode i.s.f.
bare at kalde med this.

Og tråden kører.
Avatar billede stephanryer Nybegynder
10. november 2004 - 18:26 #6
Og er der nogen retningslinier mht flere timere ad gangen? Tager flere timere fx meget cpu kraft?
Og mht til denne kode:
public void actionPerformed(ActionEvent evt) {
      black = !black;
      getContentPane().setBackground(black ? Color.black : Color.white);
  }
Er det så bare automatisk den actionPerformed der ligger i det objekt som refereres til hvor jeg har skrevet "HER" ?

(new Timer(2000, "HER")).start();
Avatar billede stephanryer Nybegynder
10. november 2004 - 18:27 #7
Hov, der svarede du sgu lige på spørgsmålet før jeg fik det gentaget :D Bare ignorer min sidste :) Skriv et svar og du skal have dine point.
Avatar billede arne_v Ekspert
10. november 2004 - 18:27 #8
svar
Avatar billede arne_v Ekspert
10. november 2004 - 18:29 #9
Bemærk at ret teknisk startes der kun en tråd selv om der er flere timere. Den
tråd kalder så actionPerformed fra de forskellige timere.
Avatar billede arne_v Ekspert
10. november 2004 - 18:30 #10
Og derfor bør CPU forbruget ved mange timere være minimalt.

Af hensyn til GUI responsiveness så bør actionPerformed ikke
lave store ting, da GUI ikke kan opdateres mens de kører.
Avatar billede stephanryer Nybegynder
10. november 2004 - 18:37 #11
GUI er det tastetryk og museklik og sådan noget eller hvad?

Og lige en anden ting:
Hvad gør denne kode help præcist?:

frame.pack();
Avatar billede arne_v Ekspert
10. november 2004 - 18:55 #12
Ja. En button click actionPerformed vil ikke blive udført før timer actionPerformed
er færdig.
Avatar billede arne_v Ekspert
10. november 2004 - 18:56 #13
frame.pack();

pakker framen sammen så den fylder mindst muligt med de components og den
layout manager der er på den.
Avatar billede stephanryer Nybegynder
10. november 2004 - 19:15 #14
Well så de fylder mindst muligt? I ram'en eller hvad? Og er det på bekostning af hastighed når programmet (spillet) køres?
Avatar billede arne_v Ekspert
10. november 2004 - 19:24 #15
Ja. Nej - visuelt på skærmen.
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