2016-09-26 1 views
1

Java n'est pas mon principal langage de programmation, donc mon expertise est généralement limitée dans ce domaine.Java Console Application Locked

Scénario

Cette application est censé exécuter pour indéfiniment comme un service ou démon. Son but principal est de traiter certaines lignes dans la base de données lorsqu'elles sont insérées par un autre processus.

L'application parfois Spitz des messages de journal à travers System.out.println. Il utilise également d'autres fichiers journaux. J'étais auparavant en utilisant log4j mais c'est désactivé pour le moment.

Aussi je cours cela dans l'environnement de Windows Server, si cela aide. Je ne peux pas utiliser Linux pour le moment.

Problème

Le problème est que, dans de rares occasions, je trouve l'application dans la mise en scène env/prod se verrouille ou ne semble pas traiter toutes les lignes DB plus loin. Après avoir appuyé plusieurs fois sur l'écran, il avance et commence le traitement comme d'habitude. C'est étrange parce que je ne m'attends à aucune entrée de l'utilisateur. Toute entrée de l'application provient soit de la ligne de commande, soit de la base de données.

Aussi je sais avec certitude que ce n'est pas un problème de DB. L'application n'attend pas de verrou de table. Il peut s'agir d'un verrouillage de fichier ou d'un flux System.out en cours de verrouillage. Plus tard, je n'ai pas pensé à la possibilité jusqu'à ce que je vois que certaines frappes sur l'écran «réveille» l'application. Donc, je me demande si quelqu'un peut me diriger dans une direction où je peux déboguer plus loin.

Répondre

1

Microsoft dans toute sa sagesse infinie a fait la fenêtre de la console de telle sorte qu'il vous permet de sélectionner une zone rectangulaire de caractères avec la souris. Jusqu'ici tout va bien.

Et soi-disant pour le rendre plus facile pour l'utilisateur de sélectionner du texte tandis que le texte peut être défilement, ils (dans leur infinie sagesse) gel le processus hébergé par la fenêtre du terminal si elle tente d'émettre tout texte vous sélectionnez un texte. (*)

Et il se trouve que si vous le faites aussi peu que cliquez une fenêtre de console avec la souris, ils (dans leur infinie sagesse) mettre la fenêtre en mode de sélection de texte, comme en témoigne la présence de un petit carré blanc.

Ce qui est très regrettable, car cliquer sur une fenêtre est ce que l'on fait aussi pour simplement mettre la fenêtre au premier plan. Mais il y a un énorme obtenu ici: si la fenêtre de la console n'était pas déjà au premier plan, alors cliquer dessus l'amène au premier plan. Mais si la fenêtre de la console était déjà au premier plan, cliquer dessus passe en mode de sélection. (Et bien sûr, la plupart des gens savent rarement, ou se soucient, ou veulent être dérangés, si la fenêtre est déjà au premier plan ou non.)

Donc, pour conclure: essayez de ne pas cliquer sur votre fenêtre. Cliquez seulement la légende si vous devez. Si vous cliquez accidentellement sur la fenêtre, appuyez sur [Entrée] ou cliquez à nouveau pour faire disparaître le petit rectangle de sélection blanc.

Parce que tant que le petit rectangle de sélection blanc est là, votre programme est gelé.(*) Maintenant, ils auraient facilement gelé l'affichage de la fenêtre tout en sélectionnant sans geler le processus; ils auraient pu faire en sorte que la sortie du processus continue d'être tamponnée, puis déversée sur l'écran une fois la sélection terminée, mais je suppose qu'ils étaient trop occupés avec leurs plans de domination du monde pour contourner ce problème. Je ne peux même pas commencer à penser combien de temps (= argent) doit avoir été gaspillé partout dans le monde jusqu'à présent en raison des fenêtres de Microsoft Windows Server inactives en mode de sélection alors que les gens ont l'impression qu'ils sont en train de croquer des données.

+0

Merci, je pense que c'était la cause. Je ne remarque jamais que je suis parfois en mode de sélection. – Scalable