Avatar billede papfisken Nybegynder
18. september 2003 - 04:00 Der er 24 kommentarer og
1 løsning

Problem med Applet

Jeg er lige startet med at lave applets så jeg har en række spørgsmål, jeg kunne godt tænke mig at vide hvad der er smartest at skrive en applet i, om det skal være AWT 1.0 / AWT 1.1 eller Swing, indtil videre ville jeg mene at AWT 1.1 er det optimale da jeg gerne vil have at så mange som muligt kan se appletten.

Jeg har bare det problem  at jeg har lavet en applet som ikke virker når jeg ser den i IExplorer, men den virker i appletvieweren - er det måske fordi den er compilet forkert eller hvad kan dette skyldes? ...

Sig til hvis I vil se noget kode, på forhånd tak :]
Avatar billede riversen Nybegynder
18. september 2003 - 07:07 #1
du kan jo prøve med awt1.0 og se om det virker i IE. JApplet gør i hvert fald ikke.
Avatar billede arne_v Ekspert
18. september 2003 - 07:25 #2
MS IE kører enten med en gammel MS JVM eller en nyere SUN JVM (hvis brugeren
har opdateret selv).

NS 6/7 kører med en nyere SUN JVM

NS 4 kører med en gammel NS JVM

De nyere SUN JVM understøtter både Swing (JApplet) og AWT (Applet).

De gamle MS og NS JVM understøtter kun AWT (Applet).

Jeg har en side der kan vise JVM version.

Men hvis man virkeligt vil understøtte mest muligt må man selvfølgelig
holde sig til AWT og Applet.
Avatar billede papfisken Nybegynder
18. september 2003 - 14:36 #3
Uhm AWT 1.0 er ved at være rimelig outdated så vidt jeg kan forstå, så har mere eller mindre besluttet mig for at bruge AWT 1.1, men jeg kan ikke se min applet.
Avatar billede arne_v Ekspert
18. september 2003 - 14:44 #4
Nogen fejl i Java console ?
Avatar billede papfisken Nybegynder
18. september 2003 - 18:13 #5
Ja den siger følgende:

Error loading class: Dice
java.lang.NoClassDefFoundError
java.lang.ClassNotFoundException: Dice
    at com/ms/vm/loader/URLClassLoader.loadClass
    at com/ms/vm/loader/URLClassLoader.loadClass
    at com/ms/applet/AppletPanel.securedClassLoad
    at com/ms/applet/AppletPanel.processSentEvent
    at com/ms/applet/AppletPanel.processSentEvent
    at com/ms/applet/AppletPanel.run
    at java/lang/Thread.run
Avatar billede arne_v Ekspert
18. september 2003 - 18:16 #6
Den kan ikke finde din Dice.class !

Check dit applet tag i HTML'en og at Dice.class kan hentes
fra serveren.
Avatar billede papfisken Nybegynder
18. september 2003 - 19:57 #7
Forstår jeg ikke rigtigt...

mit applet tag ser således ud:
<applet code ="Dice.class" width="400" height="500">
</applet>

Dice.class ligger i samme bibliotek som HTML filen (kører den lokalt)
Avatar billede arne_v Ekspert
18. september 2003 - 20:02 #8
Prøv evt. med:

<applet codebase ="." code="Dice.class" width="400" height="500">
Avatar billede papfisken Nybegynder
18. september 2003 - 20:12 #9
Havde jeg desværre allerede prøvet (uden succes) ...

Jeg forstår det bare ikke - Jeg kan se min applet hvis jeg bruger suns virtual machine, men ikke hvis jeg bruger den som følger med IExplorer ( jeg har ingen problemer med at se applets normalt med den som medfølger IExplorer, så forstår ikke lige hvad der går galt... )
Avatar billede arne_v Ekspert
18. september 2003 - 20:19 #10
Extender du Applet ? (hvis du extender JApplet kan den ikke vises i MS JVM)

Compiler du for JVM 1.0 ?
Avatar billede papfisken Nybegynder
18. september 2003 - 20:22 #11
Ja jeg extender Applet, jeg ved ikke lige om jeg compiler for JVM 1.0 eller hvad jeg compiler for ... :/

Jeg bruger JCreator - prøver lige at kigge på mine opsætninger - det står vel der et sted..
Avatar billede arne_v Ekspert
18. september 2003 - 20:25 #12
Ved command libe compiler er det:

-target 1.0
Avatar billede papfisken Nybegynder
18. september 2003 - 20:25 #13
Synes ikke rigtig jeg kunne finde noget - hvad skal jeg skrive i cmd for at compile for JVM 1.0 ?
Avatar billede arne_v Ekspert
18. september 2003 - 20:27 #14
javac -target 1.0 Dice.java
Avatar billede papfisken Nybegynder
18. september 2003 - 20:31 #15
Uhm nej det gjorde jeg ikke har nok gjort det til 1.3 eller 1.4 - Jeg kan slet ikke gøre det til 1.0, men jeg kan gøre det til 1.1 og nu kan jeg også se den - Giver bare nogle problemer med min buffer... men må jeg så lige kigge på
Avatar billede arne_v Ekspert
18. september 2003 - 20:34 #16
Din MS JVM er formentlig 1.1.4 eller sådan noget så det skal nok være OK.
Avatar billede papfisken Nybegynder
18. september 2003 - 20:37 #17
uhm ja okay, men dvs. hvis jeg vil sikre at så mange som mulitg skal kunne se min Applet skal jeg compile til JVM 1.0 ? ...

laver du ikke lige et svar så du kan få et par point for det?
Avatar billede arne_v Ekspert
18. september 2003 - 20:40 #18
Hm.

Min SUN JDK accepterer heller ikke 1.0 kun 1.1.

Du kan:
1) hente en atik SUN JDK
2) få fingrene i en MS JDK
3) satse på 1.1

Jeg tror godt at jeg turde #3.
Avatar billede arne_v Ekspert
18. september 2003 - 20:40 #19
svar
Avatar billede papfisken Nybegynder
18. september 2003 - 20:44 #20
uhm okay holder mig til 1.1 så, men der er opstået et andet problem nu, ved ikke om du også gider at kigge på det, jeg har en funktion til at starte terningen så den skifter værdi - men det virker ikke længere når det bliver compilet til 1.1 ...

min kode ser sådan her ud (ved ikke om du kan se nogle bugs..)

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

public class Dice extends Applet implements Runnable, MouseListener, MouseMotionListener {

    private Image dbImage, rollButtonOff, rollButtonOver, diceOn, diceOff, diceOver, diceCurrent, dot;
    private int xPosition, yPosition, diceValue = 3;
    private Random diceGenerator = new Random();
    private Graphics dbg;
   
    public void init() {
        rollButtonOff = getImage(getCodeBase(), "gfx/roll_1.jpg");
        rollButtonOver = getImage(getCodeBase(), "gfx/roll_2.jpg");

        diceOn = getImage(getCodeBase(),"gfx/button_1.gif");
        diceOff = getImage(getCodeBase(),"gfx/button_0.gif");
        diceOver = getImage(getCodeBase(),"gfx/button_2.gif");
        diceCurrent = diceOff;

        dot = getImage(getCodeBase(),"gfx/dot.gif");

        addMouseMotionListener(this);
        addMouseListener(this);
    } // init();
   
    public void start() {
        Thread th = new Thread(this);
        th.start();
    } // start();
   
    public void run() {
       
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
       
        while (true) {
            try {
                Thread.sleep (20);
            } catch (InterruptedException ex) {
            }
           
            Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
        } // while();
    } // run();

    public void update (Graphics g) {
        if (dbImage == null) {
            dbImage = createImage (this.getSize().width, this.getSize().height);
            dbg = dbImage.getGraphics ();
        }
   
        dbg.setColor (getBackground ());
        dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
   
        dbg.setColor (getForeground());
        paint (dbg);
   
        g.drawImage (dbImage, 0, 0, this);
    }

    public void paint(Graphics g) {
        g.drawImage (rollButtonOff, 100, 250, this);
        g.drawImage (diceCurrent, 150, 150, this);
        drawDots(g, diceValue);

    } // paint();

    public void mouseClicked(MouseEvent e) {
        xPosition = e.getX();
        yPosition = e.getY();

        if(diceCurrent == diceOff && xPosition<200 && xPosition>100 && yPosition>250 && yPosition<300) {
            rollDice();
           
        } else if(xPosition>150 && xPosition<210 && yPosition>150 && yPosition<210) {
            if(diceCurrent == diceOn)
                diceCurrent = diceOff;
            else
                diceCurrent = diceOn;
                repaint();
        }

    }
    public void mouseDragged(MouseEvent e) {}
    public void mouseMoved(MouseEvent e) {
        xPosition = e.getX();
        yPosition = e.getY();

        if(xPosition<200 && xPosition>100 && yPosition>250 && yPosition<300) {
            Graphics g = getGraphics();
            g.drawImage (rollButtonOver, 100, 250, this);
        } else if(diceCurrent != diceOn && xPosition>150 && xPosition<210 && yPosition>150 && yPosition<210) {
            Graphics g = getGraphics();
            g.drawImage (diceOver, 150, 150, this);
            drawDots(g, diceValue);
        } else {
            repaint();   
        }
    }

    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}

    public void drawDots(Graphics g, int value) {
        if (value != -1)
        {
          if ((value % 2) == 1)
            g.drawImage(dot,173,173,this);
          if (value >= 2)
          {
            g.drawImage(dot,183,163,this);
            g.drawImage(dot,163,183,this);
            if (value >= 4)
            {
              g.drawImage(dot,163,163,this);
              g.drawImage(dot,183,183,this);
              if (value == 6)
              {
                g.drawImage(dot,163,173,this);
                g.drawImage(dot,183,173,this);
              }
            }
          }
        }
    }

    public void rollDice() {
        diceValue = diceGenerator.nextInt(6) + 1;
        repaint();   
    }
}
Avatar billede arne_v Ekspert
18. september 2003 - 20:51 #21
Der er ikke noget der spring i øjnene.

Hvad sker der og hvad burde der ske ?
Avatar billede papfisken Nybegynder
18. september 2003 - 20:56 #22
Der der burde ske (og som virker fint hvis det bliver compilet til 1.4) er følgende: Man kan trykke på billedet rollButton (vha X,Y kordinater), derefter bliver funktionen rollDice kørt, og der bliver tegnet nye prikker på terningen.

ved 1.1 sker der ikke noget når man trykker på billedet..
Avatar billede arne_v Ekspert
18. september 2003 - 22:17 #23
Hm.

Jeg kan slet ikke få den til at køre her.
Avatar billede papfisken Nybegynder
18. september 2003 - 22:22 #24
...Det er nok fordi du ikke har billederne - jeg fandt en udvej af problemet med den random funktion jeg havde lavet - jeg blev nødt til at bruge Math.random() funktionen og så virkede det :]
Avatar billede arne_v Ekspert
18. september 2003 - 22:26 #25
OK.

Så er alt jo godt.
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