Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-04-2003, 09:55   #1
Pipppos
Senior Member
 
Iscritto dal: Jun 2001
Messaggi: 230
[java] e metodo finalize()

Si puo fare l'ovveride del metodo finalize() di Object?Mi serve eseguire una certa cosa quando il programma viene killato,ho provato ma non sembra andare
Pipppos è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 11:59   #2
soalle
Senior Member
 
L'Avatar di soalle
 
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
Non ho mai provato a farlo, ma si dovrebbe riuscire (naturalmente richiamando un bel super.finalize(); )... considera che il metodo non viene richiamato in maniera deterministica ma solo quando inizia a frullare il gc...
A questo punto ho qualche dubbio sul fatto che il gc venga richiamato nel momento in cui viene terminato il programma (d'altra parte viene rilasciata tutta la memoria assegnata a quel processo)....

quindi prova a richiamarlo tu (mi pare con Runtime.gc(); oppure con RunTime.runFinalization()

Facci sapere che sono curioso...
soalle è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 12:06   #3
soalle
Senior Member
 
L'Avatar di soalle
 
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
Ah... mi sembra ovvio ma è meglio specificare che...
naturalmente perché il gc possa fare il suo lavoro non ci devono essere più riferimenti all'oggetto in questione
soalle è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 12:26   #4
Pipppos
Senior Member
 
Iscritto dal: Jun 2001
Messaggi: 230
Ho provato ma il metodo finalize() che ho ridefinito non viene richiamato per una uscita anomala dal programma ma soltanto se si termina con una System.exit,a me invece serve che il metodo in questione venga eseguito quando il programma viene killato.
Pipppos è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 13:09   #5
soalle
Senior Member
 
L'Avatar di soalle
 
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
Non penso ci sia il modo di intercettare questo evento proveniente dall'OS...
Devi cercare una strada alternativa...
Magari se spieghi meglio il problema e le risorse che devi deallocare si riesce a capire meglio l'eventuale soluzione...

Considera inoltre che penso che neppure in Linux sia possibile intercettare il kill -9...
soalle è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 14:13   #6
Pipppos
Senior Member
 
Iscritto dal: Jun 2001
Messaggi: 230
Il programma ha un thread principale che contiene tutto il corpo del programma,resta in background (non ha interfaccia) ed emette dei messaggi tramite dialogbox in corrispondenza di determinati eventi.
All'attivazione genera un file che mi serve x controllare che altre istanze non vengano eseguite,il file dovrebbe poi essere cancellato all'uscita.Il problema è che il prog non ha una funzione di uscita quindi verrebbe killato dall'arresto di windows,avevo quindi pensato di cancellare il file nel metodo finalize()
Pipppos è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 14:25   #7
soalle
Senior Member
 
L'Avatar di soalle
 
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
Il file ti serve per creare una sola istanza del thread a livello di programmazione (cioé possibilità di istanziare un solo oggetto Thread) oppure ti serve per evitare che un utente lanci due volte il programma?
soalle è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 16:03   #8
Pipppos
Senior Member
 
Iscritto dal: Jun 2001
Messaggi: 230
Mi serve per evitare che l'utente lanci n volte il programma xchè se lo facesse esisterebbero n istanze del programma e quindi in concomitanza all'evento n dialogbox.
Pipppos è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 17:22   #9
soalle
Senior Member
 
L'Avatar di soalle
 
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
Allora prova a vedere le classi FileLock e FileChannel del package java.nio.*

Sono presenti solo dalla versione 1.4.x del jdk ma penso che dovrebbero fare al caso tuo...

... se trovi la soluzione naturalmente posta...
soalle è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 17:49   #10
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Re: java e metodo finalize()

Nel corso della discussione ho un po' perso il filo del discorso per cui prima di intromettermi avrei bisogno di una conferma:

in pratica tu vorresti eseguire del codice nel momento in cui la JVM viene chiusa e uno shutdownhook non ti basta perchè non gestisce il "killing" dell'applicazione da parte del sistema operativo?

Se la risposta è "NO" allora non ho capito niente, se è "SI" allora possiamo farci qualcosa.

Fammi sapere e in caso vediamo che si può fare.

Ciao.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 17:51   #11
soalle
Senior Member
 
L'Avatar di soalle
 
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
Cosa intendi per shutdownhook???
Mi piacerebbe esplorare questa cosa... intendi interagire con gli hook del sistema operativo tramite jni?
soalle è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 18:04   #12
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
E' un "pezzo" di java che si usa sopratutto con i database, per evitare di lasciare aperte connessioni nel caso in cui il programma venga terminato brutalmente (ad esempio via TaskManger).

L'esempio più semplice è il metodo

[File].deleteOnExit(). Quando la jvm viene chiusa il file viene cancellato.

Quello che fa quel metodo è un'implementazione di "addShutDownHook(Thread t)" della classe Runtime.

Codice:
...
Runtime.getRuntime().addShutDownHook(shutDown);
...
class ShutDown extends Thread {
	public void run() {
		//...
		//operazioni "dell'ultimo minuto"
		//...
	}
}
Il problema è che funziona solo se c'è una chiamata al metodo Runtime.exit(int), cioè se l'applicazione termina regolarmente.

Per gestire "uscite brutali" si usa allora un gestore di segnali ma la faccenda diventa un po' più laboriosa perchè fa parte di un pacchetto (sun.misc) presente nel JDK ma non documentato.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 19:44   #13
soalle
Senior Member
 
L'Avatar di soalle
 
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
Interessante.... e buono a sapersi...
soalle è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2003, 20:19   #14
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Interessante sì, ma poco "Java-style" perchè è platform-dependent e, come tutti i package sun.qualcosa, non è garantita la futura implementazione

Pippos non dà segni di vita (scherzo), lo prendo per un "SI" e posto un po' di codice (domani non sono on-line e magari deve trovare una soluzione in fretta)

Codice:
import sun.misc.*;
import java.io.*;

public class Prova {
  private ShutdownHandler shutDown=new ShutdownHandler();
  private ShutDownHook hook=new ShutDownHook();
  private boolean nostop=true;
  private File tempFile=null;

  Prova() {
    Signal.handle(new Signal("INT"),shutDown); //CTRL-C
    Signal.handle(new Signal("TERM"),shutDown); //CHIUSURA DEL SISTEMA

    //Signal.handle(new Signal("KILL"),shutDown);
    //fino al JDK v. 1.3 SHUTDOWN DA TASK MANAGER

    Runtime.getRuntime().addShutdownHook(hook);

    tempFile=new File("f:\\cancellami.txt");
    try {
      tempFile.createNewFile();
    } catch (IOException ex) {
      System.out.println(ex);
      System.exit(0);
    }

    //un ciclo infinito per verificare che funzioni
    //l'intercettazione dei segnali del sistema operativo
    while(nostop) {/*...*/}
  }

  public static void main(String[] args) {
    new Prova();
  }

  class ShutdownHandler implements SignalHandler {
    public void handle(Signal signal) {
      System.exit(0); //questo richiama l'hook
    }
  }

  class ShutDownHook extends Thread {
    public void run() {
      System.out.println("Cancello il file temporaneo");
      if(tempFile.exists()) {
        tempFile.delete();
      }
      System.out.println("il programma verrà chiuso tra 2 secondi");
      try {
        Thread.currentThread().sleep(2000);
      } catch (Exception e) {
        System.out.println(e);
      }
    }
  }
}
La classe qui sopra crea un file temporaneo e lo cancella quando la JVM viene terminata con il comando System.exit(0);la classe ShutDownHandler "forza" una chiamata all'uscita "naturale" della JVM anche quando Windows cerca di interromperne l'esecuzione allo spegnimento del sistema (il segnale in questo caso è quel "TERM") oppure quando viene premuta la combinazione CRTL-C ("INT"). Dalla versione 1.4 del JRE il segnale "KILL" sembra non funzionare più (corrisponde all'interruzione forzata da task manager) e non è una cattiva idea per ovvi motivi di sicurezza .
La chiusura effettiva della JVM è poi gestita dal Thread ShutDownHook che cancella il file "temporaneo".

Il pessimo ciclo infinito while e il suo indegno booleano "nostop" servono solo per simulare un'applicazione che gira costantemente.

Per una versione UNIX del programma i segnali dovrebbero essere "INT" "TERM" "QUIT" e (forse) anche "KILL"

Fammi sapere se è servito a qualcosa

Ciao.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2003, 09:34   #15
Pipppos
Senior Member
 
Iscritto dal: Jun 2001
Messaggi: 230
Grazissime PGI la tua soluzione funziona bene e fà proprio a caso mio
Pipppos è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2010, 16:27   #16
mone.java
Senior Member
 
L'Avatar di mone.java
 
Iscritto dal: May 2008
Città: Seattle (WA)
Messaggi: 306
Quote:
Originariamente inviato da PGI Guarda i messaggi
Interessante sì, ma poco "Java-style" perchè è platform-dependent e, come tutti i package sun.qualcosa, non è garantita la futura implementazione

Pippos non dà segni di vita (scherzo), lo prendo per un "SI" e posto un po' di codice (domani non sono on-line e magari deve trovare una soluzione in fretta)

Codice:
import sun.misc.*;
import java.io.*;

public class Prova {
  private ShutdownHandler shutDown=new ShutdownHandler();
  private ShutDownHook hook=new ShutDownHook();
  private boolean nostop=true;
  private File tempFile=null;

  Prova() {
    Signal.handle(new Signal("INT"),shutDown); //CTRL-C
    Signal.handle(new Signal("TERM"),shutDown); //CHIUSURA DEL SISTEMA

    //Signal.handle(new Signal("KILL"),shutDown);
    //fino al JDK v. 1.3 SHUTDOWN DA TASK MANAGER

    Runtime.getRuntime().addShutdownHook(hook);

    tempFile=new File("f:\\cancellami.txt");
    try {
      tempFile.createNewFile();
    } catch (IOException ex) {
      System.out.println(ex);
      System.exit(0);
    }

    //un ciclo infinito per verificare che funzioni
    //l'intercettazione dei segnali del sistema operativo
    while(nostop) {/*...*/}
  }

  public static void main(String[] args) {
    new Prova();
  }

  class ShutdownHandler implements SignalHandler {
    public void handle(Signal signal) {
      System.exit(0); //questo richiama l'hook
    }
  }

  class ShutDownHook extends Thread {
    public void run() {
      System.out.println("Cancello il file temporaneo");
      if(tempFile.exists()) {
        tempFile.delete();
      }
      System.out.println("il programma verrà chiuso tra 2 secondi");
      try {
        Thread.currentThread().sleep(2000);
      } catch (Exception e) {
        System.out.println(e);
      }
    }
  }
}
La classe qui sopra crea un file temporaneo e lo cancella quando la JVM viene terminata con il comando System.exit(0);la classe ShutDownHandler "forza" una chiamata all'uscita "naturale" della JVM anche quando Windows cerca di interromperne l'esecuzione allo spegnimento del sistema (il segnale in questo caso è quel "TERM") oppure quando viene premuta la combinazione CRTL-C ("INT"). Dalla versione 1.4 del JRE il segnale "KILL" sembra non funzionare più (corrisponde all'interruzione forzata da task manager) e non è una cattiva idea per ovvi motivi di sicurezza .
La chiusura effettiva della JVM è poi gestita dal Thread ShutDownHook che cancella il file "temporaneo".

Il pessimo ciclo infinito while e il suo indegno booleano "nostop" servono solo per simulare un'applicazione che gira costantemente.

Per una versione UNIX del programma i segnali dovrebbero essere "INT" "TERM" "QUIT" e (forse) anche "KILL"

Fammi sapere se è servito a qualcosa

Ciao.
Ciao PGI scusa se ti rompo ma ho provato ad usare questo frammento di codice e con eclipse mi dice:

Multiple markers at this line
- Access restriction: The constructor Signal(String) is not accessible due to restriction on required library /usr/lib/jvm/
java-6-sun-1.6.0.20/jre/lib/rt.jar
- Access restriction: The type Signal is not accessible due to restriction on required library /usr/lib/jvm/java-6-
sun-1.6.0.20/jre/lib/rt.jar
- Access restriction: The method handle(Signal, SignalHandler) from the type Signal is not accessible due to
restriction on required library /usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/rt.jar
- Access restriction: The type Signal is not accessible due to restriction on required library /usr/lib/jvm/java-6-
sun-1.6.0.20/jre/lib/rt.jar

Cosa significa??? Quelle librerie sono forse state deprecate??? Esistono delle alternative??

Grazie mille!!!
__________________
"Considerate la vostra semenza fatti non foste a viver come bruti ma per seguir virtute e canoscenza"
mone.java è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2010, 17:05   #17
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da mone.java Guarda i messaggi
Cosa significa??? Quelle librerie sono forse state deprecate??? Esistono delle alternative??

Grazie mille!!!
Ammazza se hai risvegliato i morti! (si fa per dire)
Sviluppi con Eclipse? Guarda qui
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
Iliad: si consolida la partnership tecno...
Il SoC a 2 nm di Samsung non sfigura nel...
Prezzo shock per i Galaxy Buds FE + nuov...
Il nuovo SoC di Qualcomm vuole stupire: ...
Offerta lampo per pulire l'auto: aspirap...
I robotaxi di Amazon entrano in azione: ...
ECOVACS DEEBOT T50 PRO OMNI Gen2 domina ...
iPhone 17 Pro su Amazon: tutti i colori,...
Disney Plus da 2,99 euro al mese per 3 m...
Nuovo test di accensione dei motori per ...
Novità dalle analisi dell'asteroi...
La PS6 sarà più potente del previsto: ec...
Sony svela Xperia 10 VII: è il nu...
Amazon Weekend da urlo: iPhone 16 a prez...
Spotify diffida ReVanced: chiesta la rim...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:15.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v