2012-03-14 12 views
5

Come afferma il soggetto, c'è un modo per disabilitare CTRL-C (e altri segnali) in modo che non possano terminare l'applicazione?Java: è possibile disabilitare Ctrl-C nell'applicazione console Java?

+2

possibile duplicato di [Gestire i segnali nella Java Virtual Machine] (http://stackoverflow.com/questions/40376/handle-signals-in-the-java-virtual-machine) –

+2

È possibile disabilitare alcuni segnali, ma non tutti eg 'kill -9';) –

+0

@Johan Questo articolo spiega alcune delle difficoltà che sto avendo. Più in particolare, sembra che la JVM intercetti segnali di hook hook di chiusura (registrati tramite Runtime.addShutdownHook) prima di terminare. Tuttavia non sembra descrivere come/se sia possibile * disabilitare * i segnali (o almeno impedirgli di chiudere l'applicazione). –

risposta

5

EDIT2: questo può anche aiutare: Capture SIGINT in Java

This e this sembrano essere ciò che si desidera.

Ctrl-C e altri comandi inviano "segnali" al programma, e se si scrive codice per "catturare" catturare quei segnali, è possibile modificare il modo in cui il programma reagisce. Idealmente, vorrai ctrl-c per terminare il programma, in quanto è ciò che l'utente si aspetta, quindi tieni presente che dovresti dire all'utente perché non si interrompe se cambi la risposta del programma.

Edit3: Il suggerimento di un keylist per i gatti è la tua prossima migliore scommessa se non puoi prendere e chiudere l'evento tu stesso. Halway down the page is an example of how to do it for java in linux/Windows - it's not a portable thing. In sostanza, il tuo programma gestirà gli eventi della tastiera invece della console inviando gli eventi keybaord ad esso. Ciò significa che la riga di comando viene ignorata e non può leggere la chiamata ctrl-c. Scriverei codice, ma ora sono al lavoro; I mercoledì sono una lunga giornata per me. Se non l'hai ottenuto prima che torni a casa, darò un'occhiata a scrivere alcuni esempi.

+0

Grazie per l'assistenza, tuttavia questi collegamenti si riferiscono alla configurazione dei ganci di arresto, che la JVM chiama prima di chiudere l'applicazione. L'applicazione è ancora terminata, che è quello che sto cercando di prevenire. –

+0

Prova quello IBM che ho appena aggiunto. Scusa, sono in una classe; Sarò in grado di dare un'occhiata più da vicino dopo che sono fuori, ma quello è sembrato il miglior articolo. –

+1

La pagina di articolo di riferimento di IBM dice che non può essere visualizzata - 404 :( – Mike

2

È necessario utilizzare un SignalHandler per intercettare il segnale SIGINT attivato da un CTRL-C. Il CTRL-C verrà gestito a livello di sistema operativo presumendo che non si desideri che la VM riceva il segnale.

IBM developerWorks ha un articolo a fare questo - http://www.ibm.com/developerworks/ibm/library/i-signalhandling/?open&l=409,t=grj,p=jsh

Oracle collegamento - http://www.oracle.com/technetwork/java/javase/signals-139944.html

+0

Sembra che nessuno di questi collegamenti funzioni, peccato che siano davvero utili. Ho appena visto http://ringlord.com/dl/Signals-in-Java.pdf che potrebbe Non si tratta delle stesse cose a cui ti riferivi. Utilizza le chiamate API Sun private: –

2

vorrei assumere se hai iniziato un KeyListener per gestire l'evento di Ctrl + C viene premuto o esso deve negare l' ' risposta naturale o chiama una subroutine che hai progettato invece.

+1

Ipotesi non sono risposte Questo dovrebbe essere un commento –

+1

Anche l'ipotesi è errata. –

Problemi correlati