Toon posts:

[JAVA] Applet teken probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het volgende appletje werkt prima op een 1.3.1 JVM van SUN, maar op de 1.4.0 (en hoger) duurt het opnieuw tekenen van de 'knopjes' na een klik enorm lang...

Is de 1.4.x JVM gewoon zwaar bagger..of doe ik ergens iets verkeerd...

De main class:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Test extends Applet implements ActionListener
{
    int j = 9;

    Knop k[] = new Knop[j];
    int iY = 0;

    public void init() {
        setLayout( null );

        for( int i = 0; i < j; i++ ) {
            k[i] = new Knop( (i * 20) + 50, 0, 0 );
            k[i].setActionCommand( "klik" );
            k[i].setBounds( i * 30, iY, 30, 30 );
            add( k[i] );
            k[i].addActionListener( this );
            k[i].events( true );
        }
    }

    public void actionPerformed( ActionEvent e ) {
        if( e.getActionCommand().compareTo( "klik" ) == 0 ) {
            for( int i = 0; i < j; i++ ) {
                k[i].events(false );
            }

            removeAll();

            iY += 30;

            for( int i = 0; i < j; i++ ) {
                k[i].setBounds( i * 30, iY, 30, 30 );
                add( k[i] );
                k[i].events( true );
            }
        }
    }
}


't 'knopje':
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
mport java.awt.*;
import java.awt.event.*;

public class Knop extends Panel
{
    String actionComm = "";
    ActionListener actionL = null;
    Color col = null;
    KnopListener kl = new KnopListener();

    public Knop( int r, int g, int b ) {
        col = new Color( r, g, b );
    }

    public void events( boolean allow ) {
        if( allow ) {
            addMouseListener( kl );
        }
        else {
            removeMouseListener( kl );
        }
    }

    public void paint( Graphics g ) {
        setBackground( col );
    }

    public void setActionCommand( String pComm ) {
        actionComm = pComm;
    }

    public void addNotify() {
        super.addNotify();

        repaint();
    }

    public void addActionListener( ActionListener pAL ) {
        actionL = pAL;
    }

    private class KnopListener extends MouseAdapter
    {
        public void mouseReleased( MouseEvent e ) {
            ActionEvent event = new ActionEvent( this, ActionEvent.ACTION_PERFORMED, actionComm );

            actionL.actionPerformed( event );
        }
    }
}


En 't html filetje:
code:
1
2
3
4
5
6
<html>
<body>
<applet name="Test" code="Test.class" width="300" height="300">
</applet>
</body>
</html>



Soz voor de enorme post..maar ik snap er geen hol meer van ;)

Verwijderd

anders post ff een lap code man jezus hahaha. Maar volgends mij is zoiets niet echt de bedoeling van gathering dat je je code post zodat iemand anders het op kan lossen maar goed ik weet het niet want ik snap ook niet echt veel van java :)

  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:52

momania

iPhone 30! Bam!

Welke versie van 1.4 gebruik je precies?
Er zijn volgens mij nog al een paar buggy versies.
Je kan trouwens van JAVA sowieso niet verwachten dat het massaal opnieuw tekenen van knopjes nou zo snel gaat.

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Topicstarter
Ik heb 't met verschillende versies geprobeerd
1.3.1 werkt prima
1.4.0_x / 1.4.1 en 14.2 zijn allemaal traag :P

[ Voor 4% gewijzigd door Verwijderd op 28-05-2003 11:30 ]


Verwijderd

ikheb geen verstand van java, maar moet dit
Java:
1
2
mport java.awt.*;
import java.awt.event.*;

niet
Java:
1
2
import java.awt.*;
import java.awt.event.*;

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Dat zal wel een CnP foutje zijn ;)..

Wat is je HTML trouwens oud? Haal die eerst eens door de html converter (zit in de bin dir)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Als ik de html door die converter haal, dwing ik iedereen tot het downloaden van de JVM die ik gebruikt heb om die applet te maken...

Ik compileer met 1.3.1 sdk..en op de machine met de 1.4.1 JVM, wil ie dan de 1.3.1 JVM gaan downloaden...totaal zinloos imho

Aangezien die applet helemaal geen spannende dingen doet, denk ik niet dat dit nodig is...(toch?)

  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

Wat het kan zijn dat je java-plugin gebruikt maakt van de default java plugin.
stel eens via start->configpanel->java plugins eens in dat je als plugin je 1.4.x wil gebruiken.

Of check via de java-console eve of je echt wel 1.4.0 draait.

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


Verwijderd

Topicstarter
Maar helemaal niemand kan me vertellen waarom die knopjes zo enorm langzaam getekend worden?

Ik heb zelf een beetje het idee dat de 1.4.x JVM gewoon brak is... :?

  • MachoM
  • Registratie: April 2003
  • Laatst online: 19-08 15:21
ze zullen bij SUN wel weten wat ze doen , zelf nog geen problemen gehad met 1.4.1 ben er wel tevreden mee eigenlijk

  • Helox-in-a-box
  • Registratie: Augustus 2000
  • Laatst online: 22:05
ergens het appletje online staan? geen zin om zelf te compilen ;)

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Verwijderd schreef op 02 June 2003 @ 15:35:
Maar helemaal niemand kan me vertellen waarom die knopjes zo enorm langzaam getekend worden?

Ik heb zelf een beetje het idee dat de 1.4.x JVM gewoon brak is... :?
JVM 1.3.1 van Sun gaat helemaal niet getriggered worden op <APPLET> tags. Je zit dus gewoon met de 1.1 van Microsoft te tekenen :)
JVM 1.4 installeert default een handler voor <APPLET> zodat hij de APPLET tags af handeld ipv de default MS JVM.

Dit kan je testen door even iets te draaien wat niet in 1.1 werkt, zoals Swing :)

Verwijderd

Topicstarter
:|

Het gaat me niet over het ja of nee gebruiken van de goede JVM...ik weet nl zeker dat ik de 1.4.1 of de 1.3.1 gebruikt, omdat m'n win XP geen MS-JVM heeft ;)

Ik wil alleen graag weten waarom de knopjes zo verrekte traag worden getekend als ik ze allemaal verwijder en opniew 'add'.

Bovenstaande applete werkt prima op machines met ms jvm maar niet op de 1.4.x van sun :(

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Als ik hier test (met de appletviewer van versie 1.4.1-b21 onder Windows 2000) dan gaat het hertekenen van de knopjes vlot zat, maar gaat er inderdaad iets mis als ik op zo'n knopje klik, wat tot gevolg heeft dat de panels verwijderd en weer toegevoegd worden. (Bij de eerstvolgende teken-actie duurt het enkele seconden (!) voordat de knopjes op de nieuwe plek staan). Het lijkt alsof de JVM moeite met het opnieuw tekenen van panels; lijkt me inderdaad een soort van bug (al is het gedrag zelf niet fout; de performance is alleen dramatisch).

Tot zover mijn bevestiging van het door Pagan omschreven gedrag.

edit:
Overigens werkt het wel weer heel aardig als ik de verschillende panels bij het klikken niet weghaal en opnieuw toevoeg, maar gewoon direct verplaats. (Ik haal dan dus "removeAll()" en "add(k[i])" op regel 31 respectievelijk 37 van Test.java weg). Het doet dan nog steeds een beetje traag aan, maar het is niet zo dramatisch als eerst (het blijft natuurlijk Java).

Ik zou je dus adviseren om alle componenten bij het initialiseren van de Applet klaar te zetten. Je kunt ze (zonder layout manager) toch altijd verplaatsen met setBounds en eventueel met behulp van de setVisible-methode of de CardLayout layout manager verbergen totdat je ze nodig hebt.

[ Voor 60% gewijzigd door Soultaker op 03-06-2003 11:28 ]


  • Donderwolk
  • Registratie: Januari 2002
  • Laatst online: 11-06 11:16
Waarom gebruik je een eigen klasse knop en niet gewoon de Button class als in java.awt.Button?

Wat moet je applet uiteindelijk nou gaan doen? Ik zie het nut er nog niet helemaal van in. :S

Gebruik anders 1 panel met een eventlistener en teken daar die vlakjes op. ipv allemaal panels aan te maken. Dat scheelt waarschijnlijk ook al aanzienlijk.

[ Voor 65% gewijzigd door Donderwolk op 03-06-2003 11:47 ]

Pwnd


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Donderwolk schreef op 03 June 2003 @ 11:36:
Waarom gebruik je een eigen klasse knop en niet gewoon de Button class als in java.awt.Button?
Is dat relevant voor het huidige probleem? Overigens is het niet eenvoudig om een AWT Button te customizen, aangezien je dan z'n peer object aan moet passen; je kunt dan veel makkelijker een Component overriden. Daarbij kan ik me voorstellen dat een je een Button als Panel wilt zien (zodat je er plaatjes en labels op kunt mikken) en dan is het gebruik van een Button natuurlijk helemaal onmogelijk.

  • Donderwolk
  • Registratie: Januari 2002
  • Laatst online: 11-06 11:16
Soultaker schreef op 03 June 2003 @ 11:49:
[...]

Is dat relevant voor het huidige probleem? Overigens is het niet eenvoudig om een AWT Button te customizen, aangezien je dan z'n peer object aan moet passen; je kunt dan veel makkelijker een Component overriden. Daarbij kan ik me voorstellen dat een je een Button als Panel wilt zien (zodat je er plaatjes en labels op kunt mikken) en dan is het gebruik van een Button natuurlijk helemaal onmogelijk.
Daarom wil ik graag nog wat aanvullende informatie van Pagan. Wat moet dit applet precies gaan doen?

Pwnd


Verwijderd

Topicstarter
Dit appletje is slechts een dingie om m'n probleem duidelijk te maken.

In 't echte appletje gebruik ik die 'panel-button' om een plaatje op te drukken.
Dit knoppie heb ik gemaakt omdat 't geheel ook moet werken op os9 (mac) en daar zijn ze nou eenmaal blijven hangen op een versie 1 jvm (net als dat ms ding) en die hebben geen swing..en dus geen knoppie dingen met plaatjes.

[ Voor 46% gewijzigd door Verwijderd op 03-06-2003 14:44 ]


  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:52

momania

iPhone 30! Bam!

Verwijderd schreef op 03 June 2003 @ 14:40:
Dit appletje is slechts een dingie om m'n probleem duidelijk te maken.

In 't echte appletje gebruik ik die 'panel-button' om een plaatje op te drukken.
Dit knoppie heb ik gemaakt omdat 't geheel ook moet werken op os9 (mac) en daar zijn ze nou eenmaal blijven hangen op een versie 1 jvm (net als dat ms ding) en die hebben geen swing..en dus geen knoppie dingen met plaatjes.
Maar moet er in je uiteindelijke applet ook echt zo drastisch iets grafisch gebeuren?
In dat geval zou ik een eerder gegeven tip gebruiken: Initialiseer alle objecten en gebruik daarvan de setVisible's ipv steeds objecten weggooien en nieuw aanmaken. Daar gaat heel veel tijd in zitten nml.
Misschien kan je wel een soort ButtonPool maken (beetje naar idee van een ThreadPool)

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Topicstarter
Mjah...ik zal 't vandaag of morgen 's gaan proberen :)

Bedankt voor de hulp / tips _/-\o_
Als 't allemaal weer niet gaat zoals ik 't wil....dan kom ik jullie weer lastig vallen met vragen >:)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
momania schreef op 03 June 2003 @ 15:13:
In dat geval zou ik een eerder gegeven tip gebruiken: Initialiseer alle objecten en gebruik daarvan de setVisible's ipv steeds objecten weggooien en nieuw aanmaken. Daar gaat heel veel tijd in zitten nml.
Mja, zoiets suggereerde ik ook al, maar je verklaring klopt niet helemaal. Die Knop-objecten worden echt precies één keer aangemaakt; ze worden alleen meerdere keren van de layout verwijderd en weer opnieuw toegevoegd. Aangezien er geen layout manager actief is, zie ik niet zo snel een reden waarom dit problemen zou moeten geven.
Misschien kan je wel een soort ButtonPool maken (beetje naar idee van een ThreadPool)
Tja, het gaat dus niet om die buttons: die worden al hergebruikt. Ik vind eigenlijk dat Sun dit gewoon moet fixen; beetje stompzinnig dat je allerlei optimalisatietechnieken moet gaan toepassen om binnen een seconde 10 simpele knopjes op het scherm te kunnen krijgen. :/

Verwijderd

Topicstarter
Net 's ff zitten kijk..maar het is veel te veel verk (en op sommige plaatsen onmogelijk) om al m'n objectjes te tekenen en invisible/visible te maken als ik ze wel of niet nodig heb.

Heb net 't boovenstaande progseltje ook maar 's als bug report bij onze vrienden van SUN gedumpt :)
Pagina: 1