Avatar billede renebmadsen Nybegynder
31. maj 2007 - 00:05 Der er 3 kommentarer og
1 løsning

Tråde. start stop fra GUI

hey jeg skal starte og stoppe en timer i en gui ved hjælp af 2 knapper. det er sådan set ok. men efter den har været stoppet og jeg vil starte den igen så får jeg fejl. hvad er mit problem.

######## Ur klassen ########
import java.text.DateFormat;
import java.util.Date;

public class Ur extends Thread
{
    private DateFormat klformat = DateFormat.getTimeInstance(DateFormat.MEDIUM);
    //private klformat = DateFormat.getTimeInstance(DateFormat.MEDIUM);
   
    public Ur()
    {
       
    }
   
    public void run()
    {
        for (int i = 0; i < 101; i++)
        {
            try
            {
                sleep((long)(1 * 1000));//Sætter tiden til 5 sec.
               
                Date tid = new Date();
                //System.out.println( tid );
                System.out.println( "Kl : "+ klformat.format(tid) );
            }
            catch (InterruptedException e)
            {
            }
        }
    }
}
####### GUI klassen ######
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;

public class GUI
{
    private JFrame frame;
    private JButton stopButton = new JButton();
    private JButton goButton = new JButton();
    private Ur tid = new Ur();

    public GUI()
    {
        initialize();
    }

    private void initialize()
    {
       
        frame = new JFrame("Digitalur");
        frame.getContentPane().setLayout(null);
        frame.setBounds(100, 100, 500, 251);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(goButton);
        frame.getContentPane().add(stopButton);
        frame.setVisible(true);
       
        goButton.setBounds(38, 40, 194, 119);
        goButton.setText("Go");
        stopButton.setBounds(266, 40, 195, 119);
        stopButton.setText("Stop");
       
        goButton.addMouseListener(new MouseAdapter()
        {
            public void mouseClicked(MouseEvent arg0)
            {
               
               
                tid.start();
            }
        });
       
        stopButton.addMouseListener(new MouseAdapter()
        {
            public void mouseClicked(MouseEvent arg0)
            {
                tid.stop();
                tid = null;
            }
        });
    }
}
Avatar billede arne_v Ekspert
31. maj 2007 - 00:48 #1
prøv:

        goButton.addMouseListener(new MouseAdapter()
        {
            public void mouseClicked(MouseEvent arg0)
            {
             
                tid = new Ur();           
                tid.start();
            }
        });
Avatar billede 0xffff Nybegynder
31. maj 2007 - 09:09 #2
For det første. thread.stop() er ikke thread safe. Så den skal ud.

arne_v's forslag er faktisk udemærket. Men der er et par problemer med den, og hvis jeg forstår din applikation rigtigt vil du kun køre din timer 100 gange. jf.

for (int i = 0; i < 101; i++)

arne_v's forslag vil have det problem at den resetter din tæller hver gang. Og det skal du så håndtere.

den måde jeg er opdraget på mht. threads er at håndtere det vha. en boolean. Den gør det samme som jeg umiddelbart kan se du er ude efter. Kode kommer her:

------------------

import java.text.DateFormat;
import java.util.Date;

public class Ur extends Thread
{
    private DateFormat klformat = DateFormat.getTimeInstance(DateFormat.MEDIUM);
    private boolean bInterrupted = false;
   
    public void urstop()
    {
        bInterrupted = false;
    }
   
    public void urstart()
    {
          bInterrupted = true;
    }
   
    public Ur()
    {
    }
   
    public void run()
    {
        for (int i = 0; i < 101; i++)
        {
            try
            {
              sleep((long)(1 * 1000));//Sætter tiden til 5 sec.

                    if (bInterrupted == true)
                    {
                Date tid = new Date();
                System.out.println( "Kl : "+ klformat.format(tid) );
                    }
            }
            catch (InterruptedException e)
            {
            }
        }
    }
}

--------------------------------------

import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;

public class GUI
{
    private JFrame frame;
    private JButton stopButton = new JButton();
    private JButton goButton = new JButton();
    private Ur tid = new Ur();

    public GUI()
    {
        initialize();
          tid.run();
    }

    private void initialize()
    {
       
        frame = new JFrame("Digitalur");
        frame.getContentPane().setLayout(null);
        frame.setBounds(100, 100, 500, 251);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(goButton);
        frame.getContentPane().add(stopButton);
        frame.setVisible(true);
       
        goButton.setBounds(38, 40, 194, 119);
        goButton.setText("Go");
        stopButton.setBounds(266, 40, 195, 119);
        stopButton.setText("Stop");
       
        goButton.addMouseListener(new MouseAdapter()
        {
            public void mouseClicked(MouseEvent arg0)
            {
                    System.out.println("hejsa");
                tid.urstart();
            }
        });
       
        stopButton.addMouseListener(new MouseAdapter()
        {
            public void mouseClicked(MouseEvent arg0)
            {
                  System.out.println("Også her");         
                    tid.urstop();
            }
        });
    }
       
        public static void main (String[] args)
      {
            new GUI();
        }
}
Avatar billede renebmadsen Nybegynder
31. maj 2007 - 13:23 #3
takker for hjælpen oxffff der er point til dig.
Avatar billede 0xffff Nybegynder
31. maj 2007 - 13:31 #4
lyder fint, her kommer der et 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