J2ME zachowanie emulatora..

0

mam kod z timerem zakomentowanym

    public SimpleTableModel getTableModel1() {
        if (tableModel1 == null) {
            // write pre-init user code here
            tableModel1 = new SimpleTableModel(new java.lang.String[][] {
                new java.lang.String[] { "", "", "", "", "" }}, null);
            // write post-init user code here
            this.dt.httpAddress = "http://kolos.math.uni.lodz.pl/~bart/tekstowy.txt";
            
        final DataTransfer mt = this.dt;
        ///*
        Timer t = new Timer();
        TimerTask tt = new TimerTask() {
        
            int count = 0;
            public void run() {
        //*/    
                String[] arrString = new String[5];
                tableModel1.setValues(mt.getArrayModel());
                Vector vec = new Vector();
                vec = mt.getVec();

                for (int i=0; i<vec.size(); i++) {
                    for (int j=0; j<5; j++) {
                        arrString = (String[])vec.elementAt(i);
                        tableModel1.setValue(j, i, arrString[j]);
                    }
                }
                
        ///*
            }
        };
        
        t.schedule(tt,0, 20000);
        //*/
        
        }
        return tableModel1;
    }

co wyswietla:
http://kolos.math.uni.lodz.pl/~bart/1.JPG

oraz timerem odkomentowanym

    public SimpleTableModel getTableModel1() {
        if (tableModel1 == null) {
            // write pre-init user code here
            tableModel1 = new SimpleTableModel(new java.lang.String[][] {
                new java.lang.String[] { "", "", "", "", "" }}, null);
            // write post-init user code here
            this.dt.httpAddress = "http://kolos.math.uni.lodz.pl/~bart/tekstowy.txt";
            
        final DataTransfer mt = this.dt;
        /*
        Timer t = new Timer();
        TimerTask tt = new TimerTask() {
        
            int count = 0;
            public void run() {
        */    
                String[] arrString = new String[5];
                tableModel1.setValues(mt.getArrayModel());
                Vector vec = new Vector();
                vec = mt.getVec();

                for (int i=0; i<vec.size(); i++) {
                    for (int j=0; j<5; j++) {
                        arrString = (String[])vec.elementAt(i);
                        tableModel1.setValue(j, i, arrString[j]);
                    }
                }
                
        /*
            }
        };
        
        t.schedule(tt,0, 20000);
        */
        
        }
        return tableModel1;
    }

co wyswietla:
http://kolos.math.uni.lodz.pl/~bart/2.JPG

nie rozumiem skad takie znieksztalcenie w pierwszym przypadku, myslalem ze to przez czestosc odswiezania ale przeciez to 20 sekund...

co moze byc tego przyczyna? bo niewatpliwie timer ma na to wplyw...

z gory dzieki za pomoc!

0

<font size="1">Czyzby troche Ci sie zrodla odwrotnie wkleily?</span>
Zwroc uwage, ze Twoja metoda zwracaja tableModel (klasa SimpleTableModel). To, co robisz w metodzie getTableModel(), w przypadku, gdy timer jest aktywny (odkomentowany), to uruchomienie nowego watku, ktory zaktualizuje tableModel po uplywie 20 s. W tym czasie jednak, aplikacja dziala dalej, a wiec metoda getTableModel() zostanie zakonczona, zwracajac aktualny, jeszcze niezainicjowany (bo Timer wciaz czeka), model tabeli.
Niezainicjowany (pusty) model jest uzyty do narysowania tabelki, po czym zostaja one wypelnione danymi. Brak autoskalowania tabelki sprawia, ze wyglada ona, jak wyglada.
Pozdr.</i>

0

powiem szczerze ze ciezko okreslic gdzie ten timer powinien byc wklejony...
postawnowilem wkleic go w startMIDlet i wyglada to tak:

    public void startMIDlet() {                                      
        Timer t = new Timer();
        TimerTask tt = new TimerTask() {
        
        int count = 0;
        public void run() {
        
        // write pre-action user code here
        switchDisplayable(null, getForm());                                        
        // write post-action user code here
        System.out.println("wykonalem\n ");
        }
        };
        
        t.schedule(tt,0, 5000);
    }  

co ciekawe w konsoli wypisuje sie napis 'wykonalem' co 5 sekund ale tabela nie jest aktualizowane pomimo ze zmieniam dane w pliku na serwerze... nie ciagnie aktualnej wersji... :|

wklejam pozostale metody uzyte w powyzszym kodzie

    public Form getForm() {
        if (form == null) {                                 
            // write pre-init user code here
            form = new Form("form", new Item[] { getDateField(), getTableItem() });                                   
            // write post-init user code here
            
        }                         
        return form;
    }
    public TableItem getTableItem() {
        if (tableItem == null) {                                 
            // write pre-init user code here
            tableItem = new TableItem(getDisplay(), "tableItem");                                    
            tableItem.setModel(getTableModel1());                                  
            // write post-init user code here
        }                         
        return tableItem;
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1