2012-04-16 4 views
2

: 나는 그것을 설명에 대해 많은 글을 본 적이자바 헤드리스 예외 설정 한 후 -Djava.awt.headless = 사실 내가 사용하고

6

데비안 리눅스 6, 1.6.29 Java 및 Tomcat을 그 java.awt X11 라이브러리가 필요합니다. 등.,하지만 그들은 문제를 해결하지 않습니다.

나는 나의 상자에 = 사실 -Djava.awt.headless를 설정하고 난 지금은 점점 오전, 헤드리스 환경의 첫 번째 문제를 해결했다 :

java.awt.HeadlessException 
java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159) 
java.awt.Window.(Window.java:432) 
java.awt.Frame.(Frame.java:403) 
javax.swing.JFrame.(JFrame.java:202) 
org.jfree.ui.ApplicationFrame.(ApplicationFrame.java:65) 
... 

내가 아는이 내가 방금 말한 자바를 수행하여 모니터가 없다는 것입니다 (실제로 환경이 헤드리스인지 확인하기 위해 독립형 Java 프로그램을 실행하면 true을 리턴합니다). DISPLAY env 변수 설정과 같은 Linux 환경과 관련이 있습니까?

감사합니다.

감사합니다.

+2

왜 Tomcat에서 JFrame을 사용해야합니까? – dash1e

+0

예. BarChartGenerator 클래스가 처음 발견되면 ApplicationFrame 클래스가 확장되었습니다. 이제는 더 이상! X11 종속성이 수정되었습니다. – mzereba

답변

0

답장을 보내 주셔서 감사합니다.

당신은 나에게 텍스트를 보내려고 노력했기 때문에. 아직 그 예외를 더 이상 던지지 않고 어떤 이유로 든 공백 이미지를 생성한다는 의미에서 여전히 작동하지 않습니다. 그것은이 제공에 대한 ImageIO.write(bufferedImage, "gif", new FileOutputStream(path+getFilename())); 불평 로그에

public BarChartGenerator(org.qcri.power.ws.client.Server oServer, ServerStatistics oServerStat, List lVMs, String path) { 

     System.setProperty("java.awt.headless", "true"); 
     boolean headless = GraphicsEnvironment.isHeadless(); 
     System.out.println("Headless: " + headless); 
     Toolkit tk = Toolkit.getDefaultToolkit(); 
     tk.beep(); 

     // generate dataset 
     final CategoryDataset dataset = createDataset(lVMs); 
     setChart(createChart(oServer, oServerStat, lVMs, dataset)); 

     // create PNG of the chart... 
     setFilename("chart_server"+oServer.getHost()+"_"+System.currentTimeMillis()+".gif"); 

     try { 
      BufferedImage bufferedImage = getChart().createBufferedImage(PowerInterface.CHART_WIDTH, PowerInterface.CHART_HEIGHT); 
      ImageIO.write(bufferedImage, "gif", new FileOutputStream(path+getFilename())); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

: 당신이 내게 준 (extends ApplicationFrame 치우는) 다음

public BarChartGenerator(org.qcri.power.ws.client.Server oServer, ServerStatistics oServerStat, List lVMs, String path) extends ApplicationFrame { 

     System.setProperty("java.awt.headless", "true"); 
     boolean headless = GraphicsEnvironment.isHeadless(); 
     System.out.println("Headless: " + headless); 
     Toolkit tk = Toolkit.getDefaultToolkit(); 
     tk.beep(); 

     // generate dataset 
     final CategoryDataset dataset = createDataset(lVMs); 
     setChart(createChart(oServer, oServerStat, lVMs, dataset)); 

     // create PNG of the chart... 
     setFilename("chart_server"+oServer.getHost()+"_"+System.currentTimeMillis()+".gif"); 

     File fImageFile = new File(path+filename); 
     try { 
      ChartUtilities.saveChartAsPNG(fImageFile, chart, PowerInterface.CHART_WIDTH, PowerInterface.CHART_HEIGHT); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

과 예제를 사용 :

그래서 나는이에서 갔다 오류가 발생했습니다 (파일이있는 동안) :

javax.imageio.IIOException: Can't create output stream! 
     at javax.imageio.ImageIO.write(ImageIO.java:1560) 
     at org.qcri.power.util.BarChartGenerator.<init>(BarChartGenerator.java:106) 

단서가 있습니까?그것은이 문제를 해결할 ApplicationFrame에서 어떤 확장하는 치료 :

+0

tomcat 홈에 temp 디렉토리를 추가하여 문제가 해결되었습니다. – mzereba

5

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/headless/에서 읽을 수 있듯이 디스플레이 장치, 키보드 또는 마우스를 지원하지 않으면 많은 구성 요소가 영향을받습니다. Canvas, Panel 및 Image 구성 요소는 HeadlessException을 던질 필요가 없습니다. 이러한 구성 요소에 빈 피어를 제공하고 간단한 구성 요소로 처리 할 수 ​​있기 때문입니다.

따라서 JFrame은 HeadlessException을 던지는 구성 요소입니다.

머리가없는 환경에서 jfreechart로 차트를 생성하려면이 링크가 도움이 될 수 있습니다. http://javaevangelist.blogspot.com.es/2010/11/creating-charts-on-headless-systems.html.

+0

답장을 보내 주셔서 감사합니다. 유용합니다. 이제는 예외를 던지려하지 않고 빈 이미지를 만듭니다 (8 시간 내에 할 수있을 때 몇 가지 게시물을 올리십시오). – mzereba

1

이 포럼 thread에서 설명한대로 VNC 서버 (또는 이와 비슷한 도구)를 설치해야 할 수 있습니다.

부록 : 차트 이미지를 파일로 저장하는 대신 writeChartAsPNG() 메서드 중 하나 (here)를 사용하여 서버의 출력 스트림에 씁니다.

+0

파일이 물리적으로 존재하기 때문에 이상하게 보일지라도 파일을 찾지 못하는 것 같아요! 그리고 경로는 정확합니다 ... – mzereba

+0

이제는 다른 문제가되었습니다. 나는 임시 파일 쓰기를위한 서버 구성 문제가 있다고 생각합니까? – mzereba

+0

분명히있을 수 있습니다. 이상. – trashgod

2
-Djava.awt.headless=false 

추가. 대부분의 Tomcat 배포 환경에는 일반적으로 X11 Windows 패키지가 없습니다. 우리는 이전 AWT 객체를 사용할 ApplicationFrame (JFram)을 필요로하지 않습니다.

내 예를

BloodChart(String title) extends ApplicationFrame 

변화 ->

BloodChart(String title) 

그것은 저를 위해 일하고, 행운입니다!

+0

내 문제가 해결되었습니다 :) –

1

이륙을 작동 이상