Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [JAVA]salve ho creato(o almeno l intenzione è quella) un programma che spenga il pc ad una determinata ora...posto il codice e mi dite che ne pensate..

    codice:
    System.out.println("inserisci l ora di spegnimento");
    Scanner s=new Scanner(System.in);
    int ora=s.nextInt();
    System.out.println("inserisci i minuti");
    Scanner ss=new Scanner(System.in);
    int minuti=ss.nextInt();
    s.close();
    ss.close();
    Date t=new Date();
    while(ora!=t.getHours()&&minuti!=t.getMinutes())
    t=new Date();
    Runtime runtime = Runtime.getRuntime();
    Process p= runtime.exec("shutdown -s -t");
    Ultima modifica di rossonero922; 07-01-2014 a 15:58

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,325
    Premesso che è un pogramma succhia-risorse (nel senso che fa un continuo poll dell'ora di sistema per stabilire se è l'orario giusto, vedi nota più avanti), non capisco per quale sistema operativo debba funzionare.

    Su Windows, i parametri si passano usando lo slash e non il meno. Il comando shutdown (che esiste solo sui sistemi NT o da Win 7 in avanti... forse anche da Vista, ma di sicuro non per XP e indietro), inoltre prevede che venga specificato un valore per l'opzione "/t" (che rappresenta il numero di secondi entro cui il PC si spegnerà).

    Su Linux, il comando shutdown non ha nessun parametro -s e, come per Windows, il parametro -t vuole l'indicazione del numero di secondi da attendere prima di effettuare l'arresto del PC.

    Può essere per MAC? Non conosco l'ambiente MAC, quindi non lo so...

    In generale, per schedulare un'operazione ad una determinata ora esistono meccanismi più corretti, come l'uso di Timer e TimerTask, che permettono, appunto, di eseguire un'operazione ad una determinata data/ora, senza impegnare il 100% della CPU per il polling dell'ora.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Premesso che è un pogramma succhia-risorse (nel senso che fa un continuo poll dell'ora di sistema per stabilire se è l'orario giusto, vedi nota più avanti), non capisco per quale sistema operativo debba funzionare.

    Su Windows, i parametri si passano usando lo slash e non il meno. Il comando shutdown (che esiste solo sui sistemi NT o da Win 7 in avanti... forse anche da Vista, ma di sicuro non per XP e indietro), inoltre prevede che venga specificato un valore per l'opzione "/t" (che rappresenta il numero di secondi entro cui il PC si spegnerà).

    Su Linux, il comando shutdown non ha nessun parametro -s e, come per Windows, il parametro -t vuole l'indicazione del numero di secondi da attendere prima di effettuare l'arresto del PC.

    Può essere per MAC? Non conosco l'ambiente MAC, quindi non lo so...

    In generale, per schedulare un'operazione ad una determinata ora esistono meccanismi più corretti, come l'uso di Timer e TimerTask, che permettono, appunto, di eseguire un'operazione ad una determinata data/ora, senza impegnare il 100% della CPU per il polling dell'ora.


    Ciao.
    hai perfettamente ragione e ti ringrazio per le dritte....per quanto riguarda il comando shutdown non ti so dire nemmeno io perche ho messo i trattini e non le slash....XD...l ho fatto velocemente e adesso pensandoci hai ragione riguardo l uso di Timer...ma messo da parte questo...la base è buona?cioè pur essendo che mi frega risorse,è un programma che funzionerà questo?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,325
    Quote Originariamente inviata da rossonero922 Visualizza il messaggio
    la base è buona?cioè pur essendo che mi frega risorse,è un programma che funzionerà questo?
    No, per alcuni motivi:

    1) Fai uso di API deprecate: getHours() e getMinutes() della classe Date sono state deprecate tanti, ma tanti anni fa (ma questo non è un problema: Java te lo permette lo stesso).

    2) La logica non è corretta: se sono le 16:37 e avvio il programma chiedendo di spegnere il PC alle 16:50, il programma fa spegnere il PC immediatamente... perchè la condizione del while risulta subito falsa:

    codice:
    while(ora!=t.getHours()&&minuti!=t.getMinutes())

    Perchè sia vera tale condizione (e, quindi, il programma continui ad attendere l'ora corretta), entrambi i membri del AND logico devono essere veri: ora, sono le 16:37 e voglio che si spenga alle 16:50, quindi:

    codice:
    (ora != t.getHours()) --> FALSE

    Questo significa che:

    1) Se l'ora è la stessa (vedi esempio), il PC si spegne subito perchè esce subito dal while: e sto guiardando solo l'ORA, i minuti non mi interessano nemmeno.

    2) Se l'ora è diversa, si spegnerà appena scatta l'ora giusta e minuti 00, oppure appena i minuti sono quelli che sto aspettando, fregandomene dell'ora, per lo stesso motivo


    Ciao.
    Ultima modifica di LeleFT; 07-01-2014 a 17:43
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    No, per alcuni motivi:

    1) Fai uso di API deprecate: getHours() e getMinutes() della classe Date sono state deprecate tanti, ma tanti anni fa (ma questo non è un problema: Java te lo permette lo stesso).

    2) La logica non è corretta: se sono le 16:37 e avvio il programma chiedendo di spegnere il PC alle 16:50, il programma fa spegnere il PC immediatamente... perchè la condizione del while risulta subito falsa:

    codice:
    while(ora!=t.getHours()&&minuti!=t.getMinutes())

    Perchè sia vera tale condizione (e, quindi, il programma continui ad attendere l'ora corretta), entrambi i membri del AND logico devono essere veri: ora, sono le 16:37 e voglio che si spenga alle 16:50, quindi:

    codice:
    (ora != t.getHours()) --> FALSE

    Questo significa che:

    1) Se l'ora è la stessa (vedi esempio), il PC si spegne subito perchè esce subito dal while: e sto guiardando solo l'ORA, i minuti non mi interessano nemmeno.

    2) Se l'ora è diversa, si spegnerà appena scatta l'ora giusta e minuti 00, oppure appena i minuti sono quelli che sto aspettando, fregandomene dell'ora, per lo stesso motivo


    Ciao.
    mmm questa volta non mi trovo con te...ora può esser che sbaglio io....se dico che deve spegnersi alle 16e50 e ora sono le 16e37 il while cicla fino a che non arrivano le 16e50 se non erro:
    fino a che quello che ho inserito è diverso dall ora corrente cicla!, quando si verifica l uguaglianza,ossia la condizione diventa falsa,quindi minuti=minuticorrenti e ora è uguale a ora corrente,esci dal while...o sbaglio?
    comunque tralasciando queste minuzie di cui a runtime mi accorgerei di sicuro, come base del programma questa è buona?

  6. #6
    mi sono accorto che hai ragione invece...ho aggiunto qualche or per risolvere...

  7. #7
    con l aggiustamento funziona..il pc si spegne, ho sostituito anche l ultima riga con
    codice:
    Process p= runtime.exec("C:/Windows/System32/Shutdown.exe -s -t 00 ");
    ...pero mi chiedevo...se ora portassi questo programma su un altro pc il nome del collegamento deve cambiare?nel caso deve cambiare come posso scrivere quella stringa in modo che portandolo da pc a pc non devo toccare la stringa stessa??

  8. #8
    se la porti in un altro sistema Windows come il tuo non deve cambiare, perché i file di sistema stanno tutti in System32
    se la porti in un sistema Linux o Mac è ovvio che devi cambiare.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  9. #9
    ok...grazie mille per l aiuto a entrambi!!

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Quote Originariamente inviata da rossonero922 Visualizza il messaggio
    ok...grazie mille per l aiuto a entrambi!!
    Io ci aggiungerei anche un -y al shutdown in modo che non ti chieda la conferma di chiusura se ci sono programmi aperti (in windows xp esisteva questo parametro, vedi se vale anche nel sistema dove devi utilizzarlo tu).

    Inoltre scusa, non sarebbe meglio che, in base all'ora e minuti di spegnimento, tu calcolassi il tempo in secondi che mancano allo spegnimento e lanciassi direttamente il comando (chiudendo quindi l'applicazione Java) con il valore -t e i secondi restanti allo spegnimento?

    ...in questo modo delegeresti direttamente l'operazione al sistema operativo senza tenere un'altra applicazione aperta.

    Non sono esperto di Java, ho fatto solo un'analisi del problema!

    Roberto

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.