Avatar billede kenneth_breve Nybegynder
24. januar 2008 - 15:09 Der er 3 kommentarer og
1 løsning

Spørgsmål til Tråde

Jeg har en klasse som hedder Person

I denne klasse kaldes en metode som hedder countCars() der befinder sig i en klasse som hedder Bil. Denne metode tæller en integer værdi op.


Meningen er at Person så skal vise værdien af integer værdien imens at optællingen foregår.

Dvs. der skal altså køre to metoder samtidig i hver sin klasse, både optællingen og visningen af optællingen.


Hvordan løser man dette problem?
Avatar billede arne_v Ekspert
25. januar 2008 - 02:31 #1
Noget a la:

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

import javax.swing.*;

public class DynNum extends JFrame implements ActionListener {
    private JTextField txt;
    private JButton btn;
    private int n;
    public DynNum() {
        n = 0;
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        txt = new JTextField();
        txt.setText(Integer.toString(n));
        getContentPane().add(txt, BorderLayout.CENTER);
        btn = new JButton("Count 10 up");
        btn.addActionListener(this);
        getContentPane().add(btn, BorderLayout.SOUTH);
        pack();
    }
    public void incr() {
        n++;
        txt.setText(Integer.toString(n));
    }
    public void actionPerformed(ActionEvent ev) {
        if (ev.getSource() == btn) {
            T t = new T(this);
            t.start();
        }
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                DynNum f = new DynNum();
                f.setVisible(true);
            }
        });
    }
}

class T extends Thread {
    private DynNum dn;
    public T(DynNum dn) {
        this.dn = dn;
    }
    public void run() {
        for (int i = 0; i < 10; i++) {
            dn.incr();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
        }
    }
}

?
Avatar billede arne_v Ekspert
25. januar 2008 - 02:34 #2
Når nu jeg lavede GUI i event thread så buder jeg jo nok også opdatere tekst feltet der:

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

import javax.swing.*;

public class DynNum extends JFrame implements ActionListener {
    private JTextField txt;
    private JButton btn;
    private int n;
    public DynNum() {
        n = 0;
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        txt = new JTextField();
        txt.setText(Integer.toString(n));
        getContentPane().add(txt, BorderLayout.CENTER);
        btn = new JButton("Count 10 up");
        btn.addActionListener(this);
        getContentPane().add(btn, BorderLayout.SOUTH);
        pack();
    }
    public void incr() {
        n++;
        txt.setText(Integer.toString(n));
    }
    public void actionPerformed(ActionEvent ev) {
        if (ev.getSource() == btn) {
            T t = new T(this);
            t.start();
        }
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                DynNum f = new DynNum();
                f.setVisible(true);
            }
        });
    }
}

class T extends Thread {
    private DynNum dn;
    public T(DynNum dn) {
        this.dn = dn;
    }
    public void run() {
        for (int i = 0; i < 10; i++) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    dn.incr();
                }
            });
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
        }
    }
}
Avatar billede kenneth_breve Nybegynder
25. januar 2008 - 21:10 #3
Okay... takker Arne..

smid et svar
Avatar billede arne_v Ekspert
25. januar 2008 - 21:33 #4
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