---
title: "Anropa metoder ifrån ActionPerformed"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/117001-anropa-metoder-ifrån-actionperformed"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "Feroz"
published: "2004-11-29T22:00:21.000Z"
updated: "2004-12-05T11:05:40.000Z"
replies: 10
views: 494
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/117001-anropa-metoder-ifrån-actionperformed"
---

# Anropa metoder ifrån ActionPerformed

## #1 — Feroz, 2004-11-29T22:00Z

Hej! Jag läser Java i skolan och är nybörjare.

Mitt problem ligger i metoden ActionPerformed, alltså den klassen som du hamnar i om du trycker på en JButton. Om jag förstått allt rätt så räknas denna metod som en egen tråd? 

Jaja, det jag vill göra är att anropa en metod i samma klass när jag trycker på en knapp. 

Men det fungerar inte! Jag kan anropa metoden ifrån andra klasser och ifrån andra delar av samma klass, men inte ifrån "ActionPerformed"-metoden...

Beror det på att man byter tråd?
Hur skall jag göra för att få anropet att fatta vad det är jag menar?

```
class Spel extends JFrame implements ActionListener
{
        ...en massa kod...

        public void trycka(int nummer)
        {
                try {Thread.sleep(300);} catch (InterruptedException e) {}
                knapp[nummer].setIcon(ner[nummer]);
                try {Thread.sleep(500);} catch (InterruptedException e) {}
                knapp[nummer].setIcon(upp[nummer]);
        }

        public void actionPerformed(ActionEvent e)
        {       
                if (e.getSource() == knapp[3])
                        trycka(3);
        }
}
```

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

## #2 — spango, 2004-11-30T11:07Z

Det där ska funka (även om det inte är någe bra att ha sleep o.dy. i metoder som anropas av event-tråden, då det fördröjer alla events som kan tänkas inträffa under tiden).  Hur är det det "inte funkar"? Kompileringsfel? Exceptions? Händer inget?

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

## #3 — Feroz, 2004-11-30T16:04Z

Jag har testat en hel del nu och kommit fram till att metoderna faktiskt anropas, men de gör inte som de ska!

jag tror att det är trycka() som inte fungerar. När jag först kör programet anropas visa() som anropar trycka() och då gör programet som det skall. Jag kan anropas visa() och trycka() hur många gånger jag vill ifrån både main och ifrån samma konstruktorn i klass och den fungerar alltid.

Men när jag sen försöker anropa metoden ifrån actionPerformed så fungerar den inte...

```
//////////////////////////////////////////////////////////////////////////////////////
        public void trycka(int nummer)
        {
                try {Thread.sleep(300);} catch (InterruptedException e) {}
                knapp[nummer].setIcon(ner[nummer]);
                try {Thread.sleep(500);} catch (InterruptedException e) {}
                knapp[nummer].setIcon(upp[nummer]);

        }
//////////////////////////////////////////////////////////////////////////////////////////
        public void visa()
        {
                for(int index=0; index<knappfacit.size(); index++)
                        trycka(((Integer) knappfacit.get(index)).intValue());
        }
//////////////////////////////////////////////////////////////////////////////////////////
```

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

## #4 — Viktor, 2004-11-30T20:33Z

Åter igen, vad är det som inte fungerar? Vad får du för fel?

/Viktor

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

## #5 — Feroz, 2004-11-30T20:51Z

Ursäkta, det kanske inte framgick att jag lyckas kompilera programmet utan problem. 

Men när jag kör det och kommer till den punkt där trycka() anropas ifrån actionperformed så anropas den men sleep och bytabildsaken fungerar inte. Det gör dom därimot när den anropas ifrån någon annanstans i koden.

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

## #6 — Viktor, 2004-11-30T21:36Z

Har du provat med att slänga in en "System.out.println(nummer);" först i trycka funktionen? Då kan du se exakt vilket nummer som skickas (och om det skickas något). Prova även att slänga in "e.printStackTrace(System.err);" i din catch block så du kan se om det är något som går fel där (du bör *alltid* skriva ut felmedelanden i catch block).

/Viktor

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

## #7 — Feroz, 2004-12-01T08:28Z

Ja, allt det stämmer. Det enda som inte fungerar är Sleep

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

## #8 — Feroz, 2004-12-04T22:34Z

Jag försökte fuska och byta ut Sleep mot en While-sats som räknar ned, men den hoppade över den också...

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

## #9 — spango, 2004-12-05T10:21Z

Mhm, det är kompilatorn som optimerar bort busy waits. Men hur är det sleep inte "fungerar"? Får du ett InterruptedException?

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

## #10 — Feroz, 2004-12-05T10:36Z

det vet jag inte... hur kollar det och hur får jag den att priritera sleep?

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

## #11 — spango, 2004-12-05T11:05Z

```
 try { 
    Thread.sleep(300); 
} catch (InterruptedException e) {
    System.err.println("Någonting gick snett:");
    e.printStackTrace();
}
```

Egentligen borde du inte få några såna här undantag, men man vet ju inte.

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

---

Tråden på webben: https://www.webforum.nu/amne/java/117001-anropa-metoder-ifrån-actionperformed
