3 votes

Processus d'arrière-plan en Java

J'ai préparé l'examen OCP en Java 7. Dans le livre que je lis, je tombe sur quelque chose que je ne comprends pas complètement.

C'est-à-dire,

Si la JVM est invoquée indirectement par l'IDE, ou si la JVM est invoquée à partir de l'application a procédure en arrière-plan puis l'appel de la méthode System.console() sera échouera et retournera null.

Dans quel cas et comment invoque-t-on la JVM à partir du processus d'arrière-plan ? Quelqu'un peut-il nous en dire plus ? Meilleures salutations

3voto

Eric Jablow Points 4385

Supposons que vous êtes sur un système UNIX, et que vous exécutez un programme qui peut demander deux opérandes et produire leur somme. Si vous l'invoquez sous la forme :

/home/ucas> java -jar add.jar
Please enter the first summand:
42
Please enter the second summand:
17
The sum is 59.

Maintenant, supposons que vous l'exécutez en arrière-plan :

/home/ucas> java -jar add.jar &
java.lang.NullPointerException at Add.main(Add.java:17)
....

En regardant dans Add.java, on voit :

Console console = System.console(); // 16
Reader  reader  = console.reader(); // 17

Le processus est détaché du terminal, donc console sera null . La trace de la pile est imprimée sur l'erreur standard, qui n'est pas redirigée.

1voto

The New Idiot Points 23130

Ceci est conforme à la docs

La présence d'une console dans une machine virtuelle dépend de la plate-forme sous-jacente et de la manière dont la machine virtuelle est invoquée. Si la machine virtuelle est lancée à partir d'une ligne de commande interactive sans rediriger les flux d'entrée et de sortie standard, sa console existera et sera généralement connectée au clavier et à l'écran à partir desquels la machine virtuelle a été lancée. Si la machine virtuelle est démarrée automatiquement, par exemple par un planificateur de tâches en arrière-plan, elle n'aura généralement pas de console.

Les IDE comme Eclipse exécutent votre application en tant que processus d'arrière-plan et non en tant que processus de niveau supérieur avec une console système.

1voto

assylias Points 102015

Cela signifie simplement que si vous lancez une JVM à partir de votre IDE ou en tant que processus enfant de votre processus Java principal, aucune console ne lui sera associée.

  • dans le cas d'un IDE, la console de l'IDE est utilisée.
  • dans le cas d'un sous-processus, vous devez rediriger les flux d'entrée/sortie vers le processus principal si vous voulez que le sous-processus utilise la console du processus principal.

0voto

Dhrubajyoti Gogoi Points 1068

Si vous invoquez JVM depuis un autre processus. Vous n'aurez pas accès à la console. Par exemple, vous pouvez exécuter un programme java à partir d'un autre programme java en utilisant Runtime.exec(...).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X