Widoczność zmiennej?

0

W klasie generator, przeliczam w metodzie freqToTime(), wartość wysłaną z przycisku w innej klasie, na czas. W klasie test wywołuję metodę generator.setFreq(wartosc). Wywołując w metodzie setFreq(), freqToTime() otrzymuję w poprawny sposób f i T. Jednak gdzy dochodzi do uruchomienia wątku, w f jest cały czas 0. W czym jest błąd?

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

public class Generator implements Runnable
{
    
    
    private boolean power;
    private double f,freq ;
    private double T;
    private Thread watek; 
    ActionListener actionListener=null;
   
    
    public Generator()
    {
        
        power=false;
        watek = new Thread(this);
        watek.start();  

    }    

    void setFreq(double f)
    {
        this.f=f;
    }

    public void genOn()
    {
       power = true ;
    }
    public void genOff()
    {
        power=false;
    }      
       
    public int freqToTime()
    {
        double freq=f;
        System.out.println("ftt" + freq);
        T=(1000/freq); 
        return (int)T;
    } 
    public void run() {
        while(true)
        {
            while(power) 
            {             
                if (actionListener != null) 
                        {
                              actionListener.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "generator"));
                        }
                try { 
                    
                    Thread.sleep(freqToTime() );               
               // Thread.sleep(100);
                } 
                catch( InterruptedException e) {};
            }
            try{Thread.sleep(5);}
            catch(Exception e){}
        }
    }
        public void addActionListener(ActionListener listener)
    {
            actionListener = AWTEventMulticaster.add(actionListener, listener);
    }
    public void removeActionListener(ActionListener listener)
    {
            actionListener = AWTEventMulticaster.remove(actionListener, listener);
    }
}
0

while ze sleep-em nie wyglądają dobrze:)
Nie do końca rozumiem. Wywołując konstruktor generator od razu odpala się run(), bo tak mu kazałeś. W run() odpala się freqToTime(), które za freq próbuje podstawić f. Problem polega na tym, że nigdzie nie ustawiasz tego f. Pokaż może kod, w którym to wywołujesz. Na pewno ustawiasz f w tej samej instancji obiektu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1