Visualizzazione dei risultati da 1 a 10 su 11

Visualizzazione discussione

  1. #4
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Ecco la mia soluzione almeno parzialmente , perchè non funzione ancora bene:
    codice:
    package jcallremember.client;
    
    
    import jCallRemember.libreria.ClienteDB;
    import java.awt.Color;
    import java.lang.reflect.InvocationTargetException;
    import java.util.concurrent.locks.ReentrantLock;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.SwingUtilities;
    
    
    /**
     *
     * @author Linux
     */
    public final class TaskAppuntamento extends java.util.TimerTask {
        private static ReentrantLock lock=new ReentrantLock();
        private FormSchedaCliente F;
        private Thread T;
        public ClienteDB getInfo() {
            return info;
           
        }
    
    
        public void setInfo(ClienteDB info) {
            this.info = info;
        }
        private ClienteDB info;
    
    
        TaskAppuntamento(ClienteDB cliente) {
            T=new Thread(this);
            this.setInfo(cliente);
        }
        public void start(){
            T.start();
        }
        public void threadTimer(){
            F = new FormSchedaCliente(this.getInfo());
            SwingUtilities.invokeLater(F);
        }
        public void threadT(){
            try {
                    
                    while (!F.isSceltaEffettuata()) {
                        lock.lock();
                        int row = FormClientiOggi.getInstance().getModelTable().findRow(info);
                        try {
                            FormClientiOggi.getInstance().getTable().setRowSelectionInterval(row, row);
                            FormClientiOggi.getInstance().getTable().setSelectionBackground(Color.MAGENTA);
                            Thread.sleep(1000);
                            FormClientiOggi.getInstance().getTable().setSelectionBackground(Color.CYAN);
                             FormClientiOggi.getInstance().getTable().repaint();
                        } finally {
                            lock.unlock();
                        }
                    }
    
    
                } catch (InterruptedException ex) {
                    Logger.getLogger(TaskAppuntamento.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        
        @Override
        public void run() {
            if(Thread.currentThread().getId()!=this.T.getId()){
                
                this.threadTimer();
                this.start();
                
            }
            else if (Thread.currentThread().getId() == T.getId()){
                this.threadT();
            }
        }
    
    
    }
    il thread del Timer si occupa solo di creare il form e di dire all'edt di disegnarlo, mentre l'altro thread si occupa di gestire il colore delle righe della jtable, ogni formschedacliente, fa riferimento a un cliente nella jtable, quando il form viene creato le righe del corrispondente cliente dovrebbero
    lampeggiare.. Pero secondo me c'è qualche problema di sincronizzazione, considerando che Jtable non è thred safe ,e quel FormClientiOggi è un singleton.. help me please
    Inoltre la seconda volta non me lo colora anche se ho testato che l'istruzione viene eseguita,ovvero non colora di blu, ma il ciclo si ripete
    Vorrei far lampeggiare le righe contemporaneamente anche nel caso di più task.
    ho anche una domanda ma se invoco repaint() su un istanza jtable, il repaint mica è eseguito dall'edt?
    Ultima modifica di linux_r; 22-05-2014 a 12:50

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.