응용 프로그램 서버 Java에서 코드가 실행 중인지 여부를 감지하는 가장 좋은 방법

StackOverflow https://stackoverflow.com/questions/1014620

  •  06-07-2019
  •  | 
  •  

문제

J2EE Bean의 경우 Java Swing 애플리케이션을 위해 개발 된 코드를 재사용하고 있습니다. joptionpane.showmessagedialog ()는 불행히도 일반적으로 사용됩니다. 대부분의 발생은 J2EE 애플리케이션에 의해 재사용되지 않는 코드 섹션에서 운 좋게 발생하지만 경우에 따라 코드의 낮은 수준에는 JoptionPane.showMessagedIalog ()의 인스턴스가 있습니다. 분명히 이것은 서버에서 대화 상자가 팝업되는데, 이것이 내가 피하고 싶은 것입니다.

첫 번째 단계로서 나는 어떻게 든 서버에서 대화 상자가 발생하지 않도록하고 싶습니다.

누군가 어떤 사건이나 페인트 대기열에서 엿보기를 제안했습니다 (나는 어느 것을 기억하지 않습니다) : 그것은 다음과 같습니다.

// old code: JOptionPane.showMessageDialog(msg);
if ( someEventQueue.size() == 0 ) // <== consider this pseudo-code
  Log.log(msg); // I am running on a server. Tell the log.
else
  JOptionPane.showMessageDialog(msg); // I have a user made of meat. Tell him!

난 절대로 진짜 그 일이 있었어요. 당신은 무엇을 하시겠습니까?

도움이 되었습니까?

해결책

서버가 시작되었는지 확인하십시오

java -Djava.awt.headless=true

대부분의 서버는 기본적으로 그런 식으로 시작해야합니다. 그런 다음 확인할 수 있습니다.

boolean headless_check = GraphicsEnvironment.isHeadless();

헤드리스에 대한 자세한 내용은 사용할 수 있습니다 여기:

다른 팁

방금 Linux에서 OpenJDK 런타임 환경 (ICEDTEA 2.4.3) (Gentoo Build 1.7.0_45-B31)으로 이것을 테스트했습니다. unset DISPLAY 또한 만들기에 충분했습니다 isHeadless() (그리고 isHeadlessInstance()) 반품 true.

따라서이 방법은 AWT가 시스템의 그래픽 기능을 무시 해야하는지 여부를 알려주는 것이 아니라 프로세스가 그래픽 기능에 전혀 액세스 할 수 있는지 여부를 알려줍니다.

예시:
코드는 디스플레이 카드가없는 일부 상자에서 실행 중입니다 (아마 당신이 알고 싶은 것일 것입니다) 따라서 헤드리스 모드인지 여부를 알고 싶은 경우 언제든지 시스템 속성을 확인할 수 있습니다. 강요된.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top