Newsgroup: it.comp.java
Titolo: Assurdo!... 7 secondi per un add()!!!!!!! (java 1.4.1)

il seguente codice sulla ver 1.4.1 (beta) :   add(pannello,0) o
add(pannello) ;
impiega 4-7 secondi?????...... fino alla 1.3 andava benissimo! (o quasi)
Sono 15 giorni che sto dietro ad un progetto per i frame interni AWT..
funzionava abbastanza bene.. poi provo NS su cui ho il plug -in 1.4.1 ... ed
ecco la sorpresa!..  La solita storia: gia' un paio di mesi fa ho perso 2
settimane per rendere compatibile il tutto evitando i Bug  della 1.4...
Con la *portabilita'* Java devi scrivere un programma apposito per ogni
browser/SO... e non basta, anche per ogni Ver. Java.
Mah... odio Java! :-(
Se qualcuno mi illumina al riguardo..
Grazie
Oxy

Provate questo esempio con il plug-in 1.4... e ditemi se funzia bene..  a me
per nulla!
Ci mette almeno 4-5 secondi dopo il click, ma in alcuni casi anche 20!!!
Mah.. sto "Java"...
Ciao
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
<APPLET CODE="GraphApplet.class" WIDTH="300" HEIGHT="200">
</APPLET>
</BODY>
</HTML>
import java.awt.*;
public class GraphApplet extends java.applet.Applet {
  Panel p =new Panel();
  public void init(){
 setLayout(null);
 p.setBackground(Color.yellow);
 p.setBounds(10,10,100,20);
 add(p);
 }
  public boolean  mouseDown(Event evt, int x, int y)  {
 p.setBackground(Color.red);
 add(p);
 return true;
 }
}


Non e' meglio se ti leggi un po' di documentazione prima di sparare con li cannone?
Questi i problemi piu' gravi:
1. se fai delle modifiche a dei componenti visualizzati devi chiamare la funzione
validate() su tali componenti (scritto nella documentazione, in diversi punti)
2. ad ogni mouseDown() tu aggiungi un nuovo pannello all'applet: per quale motivo? Non e'
sufficiente modificare quello che hai gia' aggiunto? Nella tua versione e' un miracolo che
funzioni.
Poi: 
3. setLayout(null) non e' il metodo indicato per gestire il layout management, perlomeno
in un applet che e' visualizzata in un browser: usa un layout manager (leggi il tutorial)
4. mouseDown() fra l'altro e' un metodo deprecato, ormai da anni (leggi la doc. per la
correzione)
Mettendo a posto 1 e 2 il tuo applet funziona perfettamente, e non si riesce neanche a
cronometrare il tempo che spende per cambiare colore al pannello. (ehm... come si fa a
cronometrare un elapsed in millisecondi? Leggi la documentazione di System).
In conclusione: stai sereno, leggi la documentazione e riprova.
Ciao,
    Bruno.
 
---
| Bruno Bossola 
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola
|
| Membro del JUG Torino - 
http://www.jugtorino.it
| 

 cronometrare un elapsed in millisecondi? Leggi la documentazione di
System).
Scusami Bruno... ma mi sa che non hai capito nulla!... Quello e' solo un
semplice esempio per mostrarti un credo bug della 1.4...
In realta' i pannelli fungono da internal frame AWT ... (si, lo so che ci
sono quelli swing... ma non lo posso usare)  add e' l'unico modo che io
conosco per metterli in primo piano quando si sormontano. Ora vediamo se sei
cosi' saputello da darmi una soluzione o se come molto spesso succede...
In conclusione sono + in.....to di prima!.... Io non ho trovato nulla nella
documentazione... ho solo trovato sul forum sun altri con lo stesso
problema... e nessun saputello che l'ha risolto!
Ciao


 Ciao
[CUT]
Sei sicuro di non essere un troll?
Dai un occhiata al codice, č scritto in maniera "opinabile"
Giuseppe
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.386 / Virus Database: 218 - Release Date: 09/09/2002


Ma sei veramente spettacolare! Ma come puoi pretendere che qualcuno ti risponda se tratti
la gente cosi? Boh... mistero!
Comunque adesso faro' un spike per capire il problema, se riesco a risolvero postero' il
codice sul NG (lo devo a chi "ascolta" questo thread) e poi (anche in base alla tua
eventuale risposta) credo ti mettero' nel mio kill file. Almeno fino a quando non
imparerai a comportarti in modo + civile.


 imparerai a comportarti in modo + civile.
Scusami sono stanco e stressato... ho dormito due ore e mi sono risvegliato
con il sito sparito causa trasferimento server (a mia insaputa)
Ho passato l'ultimo mese prima per rendere compatibile l'applet a NS e Java
1.4, poi a farmi delle finestre interne... erano tre giorni che cercavo di
correggre un piccolo ma fastidioso problema con la 1.3, sempre riguardante
add() (si perdeva la pos. del mouse mettendo il pannello in primo piano e
trascinandolo senza un doppio click) ieri sera la scoperta... E' da quando
uso java che lotto contro le varie versioni Java-IE- NS... Ufh!
Non sono un esperto, vengo qui quando mi trovo di fronte ad ostacoli per me
insuperabili e spesso (evidentemete per colpa mia) trovo risposte
semplicistiche che non risolvono.
Ciao e grazie in ogni caso.
Oxy

 Sei sicuro di non essere un troll?
Prima o poi doveva succedere... il mio primo "troll"  !!! :))
Se trovare un problema, forse un bug e' essere troll, allora lo sono!... In
caso contrario ti sfido a farlo funzionare correttamente... con un
add(panel,0) fuori dal init() ( con i textfield non ci sono problemi).
Ciao

Allego al messaggio il codice che avresti potuto scrivere per rendere chiaro il problema.
Se usato da applicazione, tutto funziona perfettamente: se invece e' attivato dal plugin o
dall'appletviewer si verifica (almeno da me) un rallentamento generale nello swap dei
pannelli e un mancato refresh, secondo me indice di qualche eccezione che "scappa".
Ci lavorero' un po' sopra, se qualcun altro vuole contribuire e' benvenuto.
Ciao,
    Bruno.
-------------- GraphApplet.java --------------
import java.awt.*;
import java.awt.event.*;
public class GraphApplet extends java.applet.Applet 
{
    private Panel[] panels;
    public void init()
    {
        createPanels();
        placePanels();
    }
    private void moveToFront(Panel p)
    {
        remove(p);
        add(p,0);
        validate();
    }
    private void createPanels()
    {
        final Color[] colors = new Color[]{Color.red, Color.yellow, Color.blue};
 
        panels = new Panel[colors.length];
        for (int i=0; i<colors.length; i++)
        {
            final Panel p = new Panel();
            String name = Integer.toString(i);
 
            p.setSize(100,100);
            p.setBackground(colors[i]);
            p.addMouseListener(new MouseAdapter()
                {
                    public void mouseClicked(MouseEvent e) 
                    {
                        moveToFront(p);
                    }
                });
            p.add(new Label(name));
            p.setName(name);
 
            panels[i] = p;
        }
    }
    private void placePanels()
    {
        setLayout(null);
        for (int i=0; i<panels.length; i++)
        {
            add(panels[i]);
            panels[i].setLocation(30*i, 30*i);
        }
    }       
 
    public static void main(String args[])
    {
        GraphApplet applet = new GraphApplet();
        final Frame f = new Frame();
        f.addWindowListener(new WindowAdapter()
            {
                public void windowClosing(WindowEvent e)
                {
                    f.dispose();
                    System.exit(0);
                }
 
            });
 
        f.setSize(220,220);
        f.setLayout(new BorderLayout());
        f.add(BorderLayout.CENTER, applet);
 
        applet.init();
        applet.start();
        f.setVisible(true);


 pannelli e un mancato refresh, secondo me indice di qualche eccezione che
"scappa".
Infatti... esattamente come prima.... :-(...
Secondo te questo cose' se non un bug? :)
Penso che usero' un "windows" frame limitandone il posizionamento
all'interno dell'applet. Non li ho mai usati, ma dovrebbero andare!?
Ciao grazie 1000.
Oxy

devo anche ringraziarti per la app+applet, avevo gia' letto in giro e
provato... ma senza successo:)
Ciao


E' possibile che sia un bug: di certo ora si capisce qual'e' il problema che avevi.
Nel dettaglio, sto indagando, il problema risiede nella addNotify() del container, che per
qualche motivo si perde. Ci sto guardando ma non garantisco nulla, lo faccio nei ritagli
di tempo.
Ciao,
    Bruno.


 di tempo.
Allora aspetto un po' prima di passare ai W.frame... io non posso
aiutarti... a quel livello non arrivo, gia' fatico a capire quello che
funziona... :-(
Non per cercare il pelo nell'uovo... Pero' mi chiedo come possa non essere
un bug!?... add() e' previsto che funzioni semplicemente cosi'... non ho
trovato avvertenze sull'uso!?...  Infatti funziona su tutte le altre ver. e
come app. tranne sulla 1.4 plug-in. A dire il vero ora mi spiego il
problemino con la 1.3, problema che nella 1.4 rimane enormemente
amplificato.
Rigrazie
Oxy

 Ciao
Dai tranqui, non ti stressare pure con noi.
Io penso che il casino derivi dal fatto che alla JVM non piace molto che dei
container si sovrappongano (essenzialmente a te non servono container, o
si?), io penserei ad usare le Java2D, solo veloci e forse funzionano meglio
(magari le classi peer al SO sono scritte un tantino meglio). Ho visto
l'esempio di Bruno ed anche io riporto lo stesso comportamento.
Giuseppe

 ha scritto nel messaggio
news:an1m6i$1g78$1...@newsreader1.mclink.it...

Java2D non va in IE.... a me servirebbero internal frame AWT... :-/
Grazie Ciao

 Grazie Ciao
Non so, ma vedendo il comportamento dei Panel su Panel, e le limitazioni di
IE (o in genere le VM installate nei browser) a questo punto fossi in te
penserei alla migrazione al Java PlugIn in modo da usare il JInternalFrame.
E' fattibile? Chi usa la tua applet? che problemi di "distribuzione" ci
sarebbero?
(a quanto pare non se ne esce...anche io ci sto provando, ma non riesco ad
ottenere niente di nuovo)
Ciao!
Giuseppe

 (a quanto pare non se ne esce...anche io ci sto provando, ma non riesco ad
Sono gia' uscito: "Windows-Frame" e seguando la regola di trasformare un
problema in una opportunita'!... ora le finestre volendo potranno anche
uscire dal contesto... problemi ancora non ne vedo... :-)...
Anzi uno: (non l'ho ancora cercato) come faccio a sapere se l'applet e' in
primo piano per metterci anche i frame?...
Ciao Grazie :)
