Avatar billede jannek_ek Nybegynder
03. september 2005 - 15:16 Der er 7 kommentarer

while(mousePressed)

jeg prøver at lave en kasse der skal bevæge sig, mens man holder knappen nede, det har jeg lavet på følgene måde:


import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class hovedVindue extends Applet
{
  public Point center = new Point();
  public int fart = 2;
  public boolean sluppet = true;
  public boolean igang = true;
  public Thread slip = new Thread(new lytter());
 
  public hovedVindue()
  {
    slip.start();
    while(igang)
    {
      while(!sluppet)
      {
        try
        {
          Thread.sleep(100);
        } catch (Exception e)
        {}
        repaint();
      }
      try
      {
        Thread.sleep(100);
      } catch (Exception e)
      {}
    }
  }
 
  public void paint(Graphics g)
  {
    center.x += fart;
    g.drawRect(center.x-5,10,10,10);
  }
}


import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class lytter extends hovedVindue implements Runnable

  public lytter()
  {}
 
  public void send(boolean klik)
  {
    sluppet = klik;
  }
 
  public void run()
  {
    muselytter lyt = new muselytter();
    lyt.lytt = this;
    this.addMouseListener(lyt);
  }
}



import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class muselytter implements MouseListener
{
  public lytter lytt;

  public void mousePressed(MouseEvent me)
  {
    lytt.send(false);
  }
  public void mouseReleased(MouseEvent me)
  {
    lytt.send(true);
  }
  public void mouseClicked(MouseEvent me)
  {}
  public void mouseEntered(MouseEvent me)
  {}
  public void mouseExited(MouseEvent me)
  {}
}


det kan fint kompileres, men når jeg tester det, siger den:

java.lang.StackOverflowError
    at java.awt.Component.<init>(Unknown Source)
    at java.awt.Container.<init>(Unknown Source)
    at java.awt.Panel.<init>(Unknown Source)
    at java.awt.Panel.<init>(Unknown Source)
    at java.applet.Applet.<init>(Unknown Source)
    at hovedVindue.<init>(hovedVindue.java:14)
    at lytter.<init>(lytter.java:8)
    at hovedVindue.<init>(hovedVindue.java:11)
    at lytter.<init>(lytter.java:8)
    at hovedVindue.<init>(hovedVindue.java:11)
    at lytter.<init>(lytter.java:8)
    at hovedVindue.<init>(hovedVindue.java:11)
    at lytter.<init>(lytter.java:8)
osv.......
Avatar billede arne_v Ekspert
03. september 2005 - 15:38 #1
jeg tror at

public class lytter extends hovedVindue implements Runnable


skal være

public class lytter implements Runnable


ellers får du en uendelig rekursion
Avatar billede jannek_ek Nybegynder
03. september 2005 - 19:11 #2
ok men nu klager den over this i lytter
Avatar billede arne_v Ekspert
04. september 2005 - 23:07 #3
hvad skal klassen lytter egentlig bruges til ?
Avatar billede jannek_ek Nybegynder
04. september 2005 - 23:11 #4
jeg kunne ikke ændre variablen sluppet inde fra mouselistener mens den bliver brugt i en lykke i hovedvinduet, så jeg tænkte at jeg måske skulle lave en tråd til at ændre den
Avatar billede arne_v Ekspert
04. september 2005 - 23:17 #5
jeg tror at du vil finde det meget nemmere med:

public class hovedVindue extends Applet implements MouseListener
{
  public Point center = new Point();
  public int fart = 2;
  public boolean sluppet = true;
  public boolean igang = true;

  public hovedVindue()
  {
    this.addMouseListener(this);
    while(igang)
    {
      while(!sluppet)
      {
        try
        {
          Thread.sleep(100);
        } catch (Exception e)
        {}
        repaint();
      }
      try
      {
        Thread.sleep(100);
      } catch (Exception e)
      {}
    }
  }

  public void paint(Graphics g)
  {
    center.x += fart;
    g.drawRect(center.x-5,10,10,10);
  }
  public void mousePressed(MouseEvent me)
  {
  }
  public void mouseReleased(MouseEvent me)
  {
  }
  public void mouseClicked(MouseEvent me)
  {}
  public void mouseEntered(MouseEvent me)
  {}
  public void mouseExited(MouseEvent me)
  {}
}
Avatar billede jannek_ek Nybegynder
04. september 2005 - 23:39 #6
hmm nu har jeg prøvet at lave den uden tråd. Den kan fint kompileres, men apletten vil ikke rigtig loade den, den går ikke i hak som ved overflow, men den står bare og loader uden at komme nogen steder...

du kan lige teste www.punkt.frac.dj/java/move/move.htm , bare for at teste om det er mit java der er noget galt med
Avatar billede jannek_ek Nybegynder
04. september 2005 - 23:39 #7
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester