이 기사는 표준 Java (J2SE) 플랫폼으로도 알려진 Java SE에서 헤드리스 모드를 사용하는 방법을 소개합니다.
헤드리스 모드는 디스플레이, 키보드 또는 마우스가 부족한 경우 시스템 구성입니다. 놀랍게 들리지만 실제로 그래픽 데이터를 사용 하더라도이 모드에서 다른 작업을 완료 할 수 있습니다.
이 모델은 어디에서 사용할 수 있습니까? 예를 들어, 사용자가 시스템에 로그인하면 인증 사진이 생성됩니다. 사진을 만들 때 디스플레이 나 키보드를 적용해서는 안됩니다. 이제 응용 프로그램에 기본 아키텍처 또는 독점 서버가 있지만이 서비스에는 디스플레이, 키보드 또는 마우스가 없습니다. 이상적인 결정은 비 시각적 특성 대신 많은 시각적 컴퓨팅 성능을 사용하는 것입니다. 헤드리스 모드에서 생성 된 그림은 더 깊은 렌더링을 위해 헤드 풀 시스템으로 전달 될 수 있습니다.
java.awt.toolkit 및 java.awt.graphicsenvironment 클래스에는 글꼴, 이미지 및 인쇄 작업에 많은 방법이 있습니다. 그러나 캔버스 및 패널과 같은 일부 범주는 헤드리스 모드에서 실행할 수 있습니다. J2SE 1.4 플랫폼 후에는 헤드리스 모드를 지원합니다.
참고 :이 기사는 Java SE6 플랫폼 버전의 문서에 중점을 둡니다. API 또는 기타 향상된 Java SE 플랫폼은 JSR270 Expert Group (JSR 270 Expert Group)에 의해 검토되고 승인됩니다.
툴킷
java.awt.toolkit 클래스는 추상적 인 부모 클래스의 추상 창 툴킷 (AWT)입니다. 툴킷의 서브 클래스는 다양한 AWT 구성 요소를 특정 로컬 툴킷에 바인딩하는 데 사용됩니다.
장치, 키보드 또는 마우스가 지원되지 않으면 많은 구성 요소가 영향을받습니다. 적절한 생성자는 헤드리스 외지 예외를 던져야합니다.
이 헤비급 구성 요소는 피어 -PEER 레벨 그래픽 기능이 필요합니다.
캔버스, 패널 및 이미지 구성 요소와 관련된 구성 요소는이 구성 요소가 운영 체제 수준에서 빈 기능을 사용할 수 있고 가벼운 구성 요소로 처리 할 수 있기 때문에 헤드리스 외환 이상을 던질 필요가 없습니다.
Headless의 툴킷은 Java 구성 요소를 로컬 리소스에 바인딩하지만 리소스에 디스플레이 장치 나 입력 장치가 포함되어 있지 않은 경우에만이 작업을 수행합니다.
그래픽 환경
java.awt.graphicsenvalonment 클래스는 주어진 플랫폼에서 Java 기술에 사용할 수있는 그래픽 디바이스 개체 및 글꼴 객체 모음을 설명하는 추상 클래스입니다. 그래픽 envalonment의 리소스는 로컬 또는 긴 정렬 장비 일 수 있습니다. GraphicsDevice 객체는 디스플레이, 프린터 또는 그래픽 캐시 일 수 있으며 Graphics2d Drawing 기능의 목표입니다. 각 GraphicsDevice에는 많은 GraphicsConfiguration 객체가 있습니다. 이 객체는 다양한 구성 환경을 지정하고 이러한 구성 환경에서 그래픽 디바이스를 사용할 수 있습니다.
표 1은 GraphicsEnvalonment 메소드를 보여주고 헤드리스 모드 지원을 확인하십시오.
표 1. 헤드리스 모드 방법
참고 : isheadless () 메소드는 시스템 하드웨어 구성 대신 특정 시스템 속성, java.awt.headless를 점검합니다.
HeadlessException에 의해 발생하는 코드는 디스플레이, 키보드 및 마우스에 따라 이들 중 어느 것도 지원하지 않는 환경에 따라 다릅니다.
헤드리스 모드를 설정하십시오
헤드리스 모드를 사용하여 작동하면 먼저 이와 관련된 시스템 속성을 확인하고 설정하는 방법을 이해해야합니다. 또한 도구 모음을 사용하기 위해 헤드리스 구현 클래스를 만드는 방법을 이해해야합니다.
시스템 속성 구성
헤드리스 모드를 활성화하려면 SetProperty () 메소드를 사용하여 해당 시스템 속성을 설정해야합니다. 이 메소드를 사용하면 예상 값으로 시스템 속성을 설정할 수 있습니다.
System.setProperty ( "java.awt.headless", "true");
위의 코드에서 java.awt.headless는 시스템 속성이며, True는 우리가 설정 한 값입니다.
동일한 프로그램 중 하나에서 헤드리스 및 전통적인 환경을 사용하려면 다음 명령 줄을 사용하여 완료 할 수 있습니다.
java -djava.awt.headless = true
기본 툴킷을 만듭니다
Java.awt.headless라는 이름의 시스템 속성이 True로 설정되면 헤드리스 툴킷이 사용됩니다. 다음으로 getDefaultToolKit () 메소드를 사용하여 헤드리스 도구 인스턴스를 만듭니다.
Toolkit tk = Toolkit.getDefaultToolKit ();
헤드리스 모드 점검
Headess 모드의 유용성을 확인하려면 GraphicsEnvironment Class ::의 isheadless () 메소드를 사용하십시오.
GraphInvironment GE = GraphicsEnvironment.getLocalGraphicsEnvironment ();
이 메소드는 java.awt.headless 시스템 속성을 확인합니다. 이 속성에 True 값이 있으면 툴킷에서 헤드리스 외환과 디스플레이, 키보드 및 마우스 그래픽 센트 클래스에 의존합니다.
헤드리스 모드에서 작동
헤드리스 모드를 설정하고 헤드리스 툴킷 인스턴스를 작성한 후 응용 프로그램은 다음 작업을 수행 할 수 있습니다.
캔버스 (캔버스)
다음 코드는 화면에 빈 직사각형 영역을 그립니다. 캔버스 클래스를 사용하여 새 캔버스 구성 요소를 만들 수 있습니다.
최종 캔버스 C = New Canvas () {공개 void Paint (Graphics g) {getBounds (0, 0, R.Height -1); , R.Width -1, 0);}};글꼴 (글꼴)
이 코드는 글꼴을 사용하여 텍스트 문자열을 그리고 텍스트 글꼴을 설정하는 방법을 보여줍니다. 그래픽 객체는이 문자열을 그리는 데 사용됩니다.
public void Paint (그래픽 g) {G.setfont (새 글꼴 ( "arial", font.italic, 12); G.DrawString ( "test", 32, 8);}
그림 물감
이 코드는 지정된 빨간색, 녹색 및 파란색 값을 사용하여 선의 색상을 설정하는 방법을 보여줍니다. 그래픽 객체는이 라인을 그리는 데 사용됩니다.
공공 void 페인트 (그래픽 g) {G. 세트 컬러 (새로운 색상 (255, 127, 0));이미지
다음 코드에서 javax.imageio.imageio 클래스의 read () 메소드는 그림 1에 표시된 Grapefruit.jpg 파일을 디코딩하고 캐시 사진을 반환했습니다.
이미지 i = null; try {file f = new File ( "Grapefruit.jpg"); im그림 1. Grapefruit.jpg 이미지 파일
인쇄
이 코드는 사용 가능한 캔버스를 인쇄하는 방법을 보여줍니다. 페인트 방법을 사용하여 프린터의 기본 화면을 사용자 정의 할 수 있습니다.
PrinterJob PJ = PrinterJob.getPrinterJob (); pj.setPrintable () {public int print (public g, pageformat pf, int pageindex) {return printable.no_such_page;} ((Graphics2d) g. ) .TransLate (pf.getImageablex (), pf.getImageabley ();삑 하는 소리
다음 코드는 툴킷 클래스의 경고음 메소드를 사용하는 경우 경고음 방법을 보여줍니다.
Toolkit Tk = ToolKit.getDefaultToolKit ();
헤드리스 모드 사용의 간단한 예
다음 헤드리스베이스 예제는이 기사에 설명 된 모든 기능을 사용합니다.
이 예제를 실행하려면 Javac을 사용하여 다음 코드를 컴파일해야합니다. Grapefruit.jpg 사진 파일을 헤드리스베이스 클래스가있는 디렉토리로 복사하십시오.
Java.ava.image hemageio {public static void ma in (string) {// 시스템 속성. // 툴킷이 초기화되기 전에, 즉, 툴킷 이전에 // getDefaultToolKit ()가 호출되었습니다 ","true "; 속성은 true로 설정되어 있습니다 GraphInvironment.getLocalGraphicsVirorOnment (); 생성 된 =} catch (Z.PrintStackTrace) (system.err); 패널이 허용됩니다. println ( " + 생성); Height -1); 글꼴 G.SetFont (새 글꼴 ( "Arial", Font.italic, 12); G.DrawString ( "Test", 32, 8);}; // 모든 작업이 올바르게 작동합니다. C.SetBounds (32, 32, 128, 128) .printstacktrace (System.err);} 최종 이미지 IM = I; (PageIndex> 0) {ret urn printable.no_such_page;} ((Graphics2d). 이미지를 페인트합니다. If! = null) {g.drawimage (im, 3222, 32, 64, 64, null);} return printable.page_exists;}); z) {z.printstacktrace (System.err);}}}}}}}그림 2는이 예에서 인쇄 결과를 보여줍니다.
그림 2. 헤드리스베이스 인쇄 출력.
또한 다음 정보를 볼 수 있습니다.
Headless Mode : java.awt.window의 java.awt.graphicsenvironment.checkheadless (알 수없는 소스). Java : 24) 프레임이 만들어졌습니다 : falsejava.head.headsexception java.awt.graphicsenvalonment.checkheadless (알 수없는 소스) t java.awt.button (headlessbasics.java : 39) 버튼 생성됩니다 : False
참고 : 데모의 목적을 위해 초기 코드는이 응용 프로그램이 2 Java.awt.headlessExceptions 이상을 던지게합니다.
이전 방법을 대체하면 표준 출력 정보를 파일에 넣고 파일을 인쇄 할 수 있습니다. 이 경우 다음 명령 줄을 사용하여 다음 예제를 실행하십시오.
Java Headlessbasics 2> Standard_output.txt
기존 응용 프로그램을 헤드리스 모드로 변환하십시오.
기존 응용 프로그램을 실행 가능한 헤드리스 모드로 어떻게 변환합니까? 이 변환을 실행하는 가장 효과적인 방법은 소스 코드를 분석하여 모든 기능이 헤드리스 모드에 의존하는지 확인하는 것입니다. 다시 말해, 동일한 기능을 실현하려면 HeadlessException 예외를 던지는 클래스 및 메소드를 찾은 다음 독립 헤드리스 모드를 사용하여 이러한 클래스 및 메소드를 대체해야합니다.
Java SE 6 API를 사용하여 특정 클래스 또는 메소드가 헤드리스 모드를 지원하는지 여부를 결정할 수 있습니다. 특정 구성 요소가 헤드리스 모드를 지원하지 않으면 프로그램이 캡처 해야하는 유일한 이상은 헤드리스 예상입니다. 그것은 다른 가능한 이상 전에 버려집니다. 그렇기 때문에이 섹션의 코드 예제에서 다른 이상을 포착 할 특별한 필수품이없는 이유입니다. 헤드리스 모드 사용 ".
헤드리스 모드를 사용하는 다른 유용한 방법의 이점을 확실히 찾을 수 있습니다. 이 기사 가이 작업을 완료하고 Java SE 플랫폼에서 새로운 세계를 플레이하는 데 도움이되기를 바랍니다.