---
title: "Anropa värde från metod i annan klass"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/145421-anropa-värde-från-metod-i-annan-klass"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "roblj689"
published: "2006-04-12T16:56:32.000Z"
updated: "2006-04-13T06:20:45.000Z"
replies: 6
views: 826
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/145421-anropa-värde-från-metod-i-annan-klass"
---

# Anropa värde från metod i annan klass

## #1 — roblj689, 2006-04-12T16:56Z

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)
{
\------------------------------------------------------------------

Permalänk: https://www.webforum.nu/p/145421

## #2 — UlfT, 2006-04-12T17:09Z

Skapa en metod i SimulateTime som returnerar tiden. Då kan klassen buffer få tiden genom att anropa den metoden.

Permalänk: https://www.webforum.nu/p/1796326

## #3 — roblj689, 2006-04-12T18:00Z

Ok, så här ser klassen SimulateTime ut nu:

\----------------------------------------------
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)
        {
\---------------------------------------------------

Permalänk: https://www.webforum.nu/p/1796342

## #4 — UlfT, 2006-04-12T20:17Z

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.

Permalänk: https://www.webforum.nu/p/1796385

## #5 — roblj689, 2006-04-13T06:04Z

try {Thread.Sleep(SimulateTime.**tid**);} ska hämta

**tid** från

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

Permalänk: https://www.webforum.nu/p/1796440

## #6 — Lime, 2006-04-13T06:19Z

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... ;-)

Permalänk: https://www.webforum.nu/p/1796443

## #7 — spango, 2006-04-13T06:20Z

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.

Permalänk: https://www.webforum.nu/p/1796445

---

Tråden på webben: https://www.webforum.nu/amne/java/145421-anropa-värde-från-metod-i-annan-klass
