Java-appletti

Oon tekemässä melko isoa applettia, siinä on 25
kuvaa, joita klkkaamalla kuvan pitäis vaihtua.
Homma toimii kyllä esim. Netscape 6-selaimella,
mutta IE5 kaatuu 24. kuvan kohdalla.
Hiiritapahtuman koodi on seuraavanlainen:

public boolean mouseDown(Event evt, int mx, int
my){
if (mx>ax && mx<(ax 355) && my>ay && my<
(ay 480)){
rivi=((my-ay)/h);
sarake=((mx-ax)/w);
if (valittu[sarake (rivi*5)]==false){
valittu[sarake (rivi*5)]=true;
repaint();
}
}
return true;
}

ja paint-metodi:

public void paint (Graphics x) {
int rr=0;
int ss=0;
nro=0;
for (int i=0;i<25;i ){
k11 = getImage(getCodeBase(),kuva[nro]
".gif");
x.drawImage(k11,((ss*w ax)),
((rr*h ay)),w,h,this);
nro ;
ss ;
if (ss==5){ss=0;rr ;}
}

}

Missähän bugi piileksii? Ihmettelee Vihori
5418
Äänestä

Muut lukivat myös

Vastaukset 5

Vanhimmat

Miten kaatuu?
Katoppas java konsolista mikä exception tulee.

Ja voisit tehä toin paint()in fiksummin, koska
nyt se lataa ne kuvat uudelleen joka kerta kun se
repainttaa sen. Lataa ne kuvat kerran init()issä,
ja paintissa vaan piirrät.

Äänestä

Itse kun piirtelin suuren joukon erivärisiä viivoja sain koneen jumiin. Sama ohjelma vähemmillä väreillä toimi hyvin.

Äänestä
  • resurssipula se todennäköisimmin on. Wintoosan
    tapa hukata (varata) muistia on ylivertainen. En
    yhtään hämmästyisi jos todellinen syy löytyisi
    selaimen muistin käytöstä.

    Äänestä

  • santtu kirjoitti:

    resurssipula se todennäköisimmin on. Wintoosan
    tapa hukata (varata) muistia on ylivertainen. En
    yhtään hämmästyisi jos todellinen syy löytyisi
    selaimen muistin käytöstä.

    Sitä se varmaan on, se kun kaatuu joskus
    IE5:sella jo aikaisemminkin ja Netscapella toimii
    ihan hyvi. Kuvat on aika pieniä giffejä, vaan 2-3
    kt. Niitä ei voi enää pienentää. Mitähän olis
    tehtävissä?

    Äänestä

Sinuna kyllä laittaisin koko ohjelman uusiksi, itse olen
tehnyt appletteja työpaikallani jo jonkin aikaa enkä
usko, että tommonen appletti voi viedä resursseja niin
paljoa että kaatuisi..
Mikäli ymmärsin oikein, sinulla on pikku kuvia, jotka
sitten vaihtavat
isoa kuvaa..
Eli teeppä vaikka ensin uusi luokka, joka toimii sitte
pikku kuvana:

public class Thumbnail extends Component {
private int index;
private Image img;

public Thumbnail(int index, Image img) {
this.index = index;
this.img = img;
}
public int getIndex() {
return index;
}
public void paint(Graphics g) {
g.drawImage(img, 0, 0, this);
}
}

Sitten appletti:

public class Test extends Applet {
Image[] images;
Image img;

public void init() {
setLayout(null);
images = new Image[1];

makeThumbNails();
loadImages();
}

private void loadImages() {
images[0] =
getImage(getCodeBase(), "0.gif");
}

private void makeThumbNails() {
ThumbNail tn = new ThumbNail(0,
getCodeBase(), "0.gif");
tn.setBounds(10, 10, 30, 30);
add(tn);
tn.addMouseListener(new
MouseL());
}

public void paint(Graphics g) {
if(img != null)
g.drawImage(img, 50, 50, this);
}

private class MouseL extends
MouseAdapter {
public void
mouseReleased(MouseEvent e) {
int i =
((ThumbNail)e.getSource()).getIndex();
img = images[i];
repaint();
}
}
}

Noin.. En kyllä tiedä yhtään toimiiko tuo, eikä se ole
millään tavalla valmis tms. kunhan vaan näpyttelin
aikani kuluksi, mutta suuntaa tuon pitäisi antaa, lisäksi
pitäisi vielä käyttää MediaTrackeria, jolla varmistetaan
että kuvat ovat oikeesti ladattu muistiin kun niitä
ruvetaan piirtämään näytölle.

Äänestä

Kommentoi aloitusta


Vihtori kirjoitti:

Oon tekemässä melko isoa applettia, siinä on 25
kuvaa, joita klkkaamalla kuvan pitäis vaihtua.
Homma toimii kyllä esim. Netscape 6-selaimella,
mutta IE5 kaatuu 24. kuvan kohdalla.
Hiiritapahtuman koodi on seuraavanlainen:

public boolean mouseDown(Event evt, int mx, int
my){
if (mx>ax && mx<(ax 355) && my>ay && my<
(ay 480)){
rivi=((my-ay)/h);
sarake=((mx-ax)/w);
if (valittu[sarake (rivi*5)]==false){
valittu[sarake (rivi*5)]=true;
repaint();
}
}
return true;
}

ja paint-metodi:

public void paint (Graphics x) {
int rr=0;
int ss=0;
nro=0;
for (int i=0;i<25;i ){
k11 = getImage(getCodeBase(),kuva[nro]
".gif");
x.drawImage(k11,((ss*w ax)),
((rr*h ay)),w,h,this);
nro ;
ss ;
if (ss==5){ss=0;rr ;}
}

}

Missähän bugi piileksii? Ihmettelee Vihori

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu