Spørgsmål om Threads / run
Ud fra en øvelse i en bog er jeg ved at lave et Java-program, der skal lave en GUI med 4 knapper.Trykker man på en "Start"-knap, vises tiden på min GUI (på et label).
Det er lavet dels vha. tråde og så princippet med to objekter, der står og sender
information frem og tilbage.
***********************************************************
Jeg har en TimerInterface.java, som de to andre klasser nedarver fra:
***********************************************************
public interface TimerInterface
{
public abstract void timerFired();
}
***********************************************************
Jeg har en DigitalClock.java, der repræsenterer min GUI og det ene objekt:
***********************************************************
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public class DigitalClock extends JFrame implements TimerInterface
{
Timer timer;
JLabel label = new JLabel();
JButton btnStart = new JButton("START");
JButton btnStop = new JButton("STOP");
JButton btnSuspend = new JButton("SUSPEND");
JButton btnResume = new JButton("RESUME");
JPanel top = new JPanel();
JPanel bottom = new JPanel();
MyJButtonListener myJButtonListener;
DigitalClock()
{
timer = new Timer(this,10000);
setUpGUI();
}
private void setUpGUI()
{
Container c = getContentPane();
c.setLayout(new BorderLayout());
bottom.setLayout(new GridLayout());
bottom.add(btnStart);
bottom.add(btnStop);
bottom.add(btnSuspend);
bottom.add(btnResume);
c.add(BorderLayout.SOUTH,bottom);
top.setLayout(new GridLayout());
top.add(label);
c.add(BorderLayout.NORTH,top);
myJButtonListener = new MyJButtonListener();
btnStart.addActionListener(myJButtonListener);
setSize(400,100);
show();
}
class MyJButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("START"))
{
timer.startTimer();
}
else if(e.getActionCommand().equals("STOP"))
{
}
else if(e.getActionCommand().equals("SUSPEND"))
{
}
else if(e.getActionCommand().equals("RESUME"))
{
}
}
}
public void timerFired()
{
Date date = new Date();
System.out.println(date);
//label.setText(date.toString());
}
public static void main(String[] args)
{
new DigitalClock();
}
}
***********************************************************Til sidst har jeg en klasse, Timer, der udgør det andet objekt:
***********************************************************
import java.util.*;
public class Timer implements Runnable
{
TimerInterface tIntObj;
int interval;
Thread timerThread = new Thread();
Timer(TimerInterface tIntObj, int interval)
{
this.tIntObj = tIntObj;
this.interval = interval;
}
public void run()
{
while(true)
{
for (int i = 0; i< interval; i++)
tIntObj.timerFired();
}
}
public void startTimer()
{
timerThread.run();
}
}
***********************************************************
Og problemet er så, at skidtet ikke virker!
Jeg tror selv problemet ligger i, at min variabel timerThread af typen Thread
ikke kører run-metoden som defineret i Timer, men sin egen run-metode, der
findes i klassen Thread.
Jeg skal have denne variabel af typen Thread - det er angivet i opgaven - så
mit spørgsmål lyder: hvordan får jeg den variabel til at køre min run-metode
i stedet for sin egen???!! Er der nogle kloge hoveder, der kan gennemskue det?
***********************************************************
