Visualizzazione dei risultati da 1 a 6 su 6

Hybrid View

  1. #1
    Ti ringrazio! Sei molto paziente con i principianti di Swing come me!
    Ne approfitto per chiederti un'altra cosa che magari è sciocca per una persona esperta.

    Allora l'applicazione fa questo:

    Mostra un campo di testo dove l'utente inserisce una stringa da cercare. Quando preme invio, una serie di classi fa una ricerca nei documenti pesenti. L'applicazione funziona bene da riga di comando e stampa i risultati in console con un semplice System.out.println.
    Ovviamente viene stampato un risultato appena un documento viene trovato (il tutto è in un ciclo).

    Vorrei che non appena venisse stampato in consolle, venisse anche aggiunto nella GUI Swing, quindi riga per riga. Usando la JLabel, invece, devo aspettare la fine della ricerca per visualizzare i risultati.
    Questo è un comportamento normale?
    La colpa è della JLabel (quindi risolvo cambiando elemento) oppure con le interfacce devo ragionare in modo diverso?
    Le due istruzioni sono consecutive quindi suppongo che non conti la posizione ma ci sia qualche altro problema.

    Ti sei mai trovato a gestire una cosa simile? E se no, come faresti?
    Grazie mille! Domani provo il tuo essempio
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Nunkij Visualizza il messaggio
    Usando la JLabel, invece, devo aspettare la fine della ricerca per visualizzare i risultati.
    Questo è un comportamento normale?
    Se tutta la ricerca è fatta nel contesto di un actionPerformed() (o qualunque altro metodo di un listener), sì, questa è purtroppo la conseguenza negativa, perché sei nel contesto del Event Dispatch Thread che è il solo thread che si occupa di gestire la interfaccia utente e dispacciare gli eventi.

    Se tieni tu "impegnato" il EDT con del tuo lavoro "lungo", il controllo non ritorna ovviamente in tempi brevi al framework Swing (il actionPerformed NON termina subito, infatti) e quindi la tua interfaccia diventa completamente congelata e non responsiva. Non è ovviamente un bel scenario.

    Si risolve creando e gestendo un thread a parte che lavora in background e lascia libero il EDT. Ma questo implica svariate altre conoscenze e attenzioni da porre.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Se qualcuno dovesse ritrovarsi con il mio stesso problema a questo link c'è un ottima spiegazione su come risolverlo. Devo adattarlo al caso mio ma l'esempio è perfettamente calzante!

    http://www.javaadvent.com/2012/12/mu...ingworker.html
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.