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
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
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.
Itse kun piirtelin suuren joukon erivärisiä viivoja sain koneen jumiin. Sama ohjelma vähemmillä väreillä toimi hyvin.
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ä?
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.