Jag har suttit hela dan med att försöka klura ut det här :x
Skulle någon kunna vara snäll att hjälpa mig? :OO
I klassen SpelFrame hämtar jag värdet på det som skrivs in och lagras i variabeln temp. Den skickas till metoden AddTime i I klassen SimulateTime.
------------------------------------------------------------------
public void actionPerformed(ActionEvent e) {
Scanner sc = new Scanner((simulateBuffering.getText()));
int temp = (sc.nextInt());
tidBuffering.AddTime(temp);
}
------------------------------------------------------------------
SimulateTime
------------------------------------------------------------------
public void AddTime(int a){
tid = a;
}
------------------------------------------------------------------
Det är slutligen i klassen buffer jag vill anropa värdet i Tread.Sleep för att styra hur länge tråden ska sövas. Det är dock här det går snett och värdet på tid vill inte läsas.
------------------------------------------------------------------
public synchronized void put(Product product)
{
//SimulateTime tid = new SimulateTime(0);
while (this.bufferList.getListLength()>=4)
while (bufferList.isEmty())
try {Thread.Sleep(SimulateTime.tid);}
catch (InterruptedException e)
{
------------------------------------------------------------------
----------------------------------------------
public class SimulateTime
{
public long tid;
public SimulateTime(long a) {}
public void AddTime(long a){
tid = a;
System.out.println(tid);}
public long getTime() {
System.out.println(tid);
return tid; }
}
---------------------------------------------
Satte System.out.println(tid); för att se om något skrevs ut, men det gör det inte :( Inte heller sövs min tråd :x
Anropar med
---------------------------------------------------
public synchronized void put(Product product)
{
SimulateTime tid = new SimulateTime(0);
while (this.bufferList.getListLength()\>=4)
while (bufferList.isEmty())
try {Thread.sleep(**tid.getTime()**);}
catch (InterruptedException e)
{
Nu är jag inte särskilt bra på Java, men det skulle ju kunna vara så enkelt som att det blir en exception helt enkelt därför att du vill att tråden ska sova 0 ms. Hur som helst är det en meningslös instruktion, som jag förstår det.
public void AddTime(long a){ tid = a;
System.out.println(tid);}
där tid får värdet av a som i sin tur fås från temp
int temp = (sc.nextInt());
tidBuffering.AddTime(temp);
i klassen SpelFrame.
Raden
SimulateTime tid = new SimulateTime(0); initierar bara en ny instans av variabeln tid vilket väl måste sättas till något värde ( i detta fall 0) för att kunna skapas (kompileringsfel annars)?
Nån som har koll på varför tid inte innehåller något värde? :l
Jo, det är helt korrekt att för att skapa en ny SimulateTid så skall du enligt konstruktorn skicka med en long. MEN denna sätter inte attributet tid utan ignoreras. Det betyder att tid inte sätts till något alls och du får ett runtime error av något slag eller ett rent skräpvärde. I din put-metod sätter du aldrig tid till något riktigt värde.
Som du skriver så gör raden SimulateTime tid = new SimulateTime(0); instansiera EN NY instans. Det är alltså inte samma instans som den du skapat i SpelFrame. Om du vill ha värdet från den SimulateTid-instansen så måste du skicka med den till sov-metoden.
F.ö. så säger kod-konventionen för java att metodnamn skall börja med en gemen.... Pörskans .NET-programmerare... ;-)
En primitiv (som long) har alltid ett värde, för fält defaultar det till 0. Så om din applikation inte sover nånting finns två alternativ; att sleep aldrig anropas eller att programmet ombeds sova med 0 eller något värde som är för lågt för att märkas. Om du har gjort en debugutskrift som aldrig skrivs ut torde det betyda att koden aldrig anropas. Lösning: Gör fler debugutskrifter som visar var koden slutar gå som den borde.
262 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9