2013-11-23 1 views
0

학교 프로젝트의 경우 파일에서 입력을 읽고 입력에서 발견 된 일부 데이터를 나타내는 막 대형 차트를 만드는 프로그램을 만들었습니다. 입력은 한 줄씩 읽고 막대 그래프는 각 줄마다 업데이트됩니다. 읽은 모든 행 ("line % d \ n", lineNumber)이 콘솔에 인쇄됩니다. 이 모든 기능이 구현되어 작동합니다. 그러나 프로그램은 콘솔에 예외를 발생시키고 멀리 떨어지게합니다. 여기에 콘솔에서 발췌 한 것입니다 :오류 메시지가 일관성없이 발생했습니다. 알 수없는 이유입니다. 모든 오류 메시지가 사라 지길 원합니다.

line 1 
line 2 
line 3 
Exception in thread "AWT-EventQueue-0" line 4 
line 5 
java.lang.IllegalArgumentException: Color parameter outside of expected range: Red 
at java.awt.Color.testColorValueRange(Color.java:310) 
at java.awt.Color.<init>(Color.java:395) 
at java.awt.Color.<init>(Color.java:369) 
at ui.staafdiagram.StaafDiagramPanel.berekenKleur(StaafDiagramPanel.java:62) 
at ui.staafdiagram.StaafDiagramPanel.tekenStaaf(StaafDiagramPanel.java:106) 
at ui.staafdiagram.StaafDiagramPanel.paintComponent(StaafDiagramPanel.java:162) 
at javax.swing.JComponent.paint(JComponent.java:1045) 
at javax.swing.JComponent.paintChildren(JComponent.java:878) 
at javax.swing.JComponent.paint(JComponent.java:1054) 
at javax.swing.JLayeredPane.paint(JLayeredPane.java:585) 
at javax.swing.JComponent.paintChildren(JComponent.java:878) 
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5219) 
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295) 
at javax.swing.RepaintManager.paint(RepaintManager.java:1236) 
at javax.swing.JComponent.paint(JComponent.java:1031) 
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39) 
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78) 
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115) 
at java.awt.Container.paint(Container.java:1967) 
line at java.awt.Window.paint(Window.java:3877) 
at javax.swing.RepaintManager$3.run(RepaintManager.java:807) 
at javax.swing.RepaintManager$3.run(RepaintManager.java:784) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:784) 
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:757) 
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:706) 
at javax.swing.RepaintManager.access$1000(RepaintManager.java:62) 
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1651) 
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:727) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:688) 
at java.awt.EventQueue$3.run(EventQueue.java:686) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:697) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)6 
    //more errors.... PS Note the '6' at the end of this block of code. Error message thrown from within out.printf("line %d\n", lineNumber)? 

내가 이해할 수없는 어떤 이유가, 오류 메시지가 동일한 코드로, 프로그램은 동일한 입력으로 실행 할 때마다 다르게 발생한다.

다음
line 1 
    line 2 
    line 3 
    line 4 
    line 5 
    line Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Color parameter outside of expected range: Red 
    6 
    line at java.awt.Color.testColorValueRange(Color.java:310) 
    //more errors... 

내 코드의 발췌 한 것입니다 : 요청이있는 경우

private void processInput() { 

    Scanner input; 
    Scanner lineScanner = null; // initialization 

    String line; 
    input = new Scanner(System.in); 
    int lineNumber = 0; 
    while (input.hasNextLine()) { 
     lineNumber++; 
     out.printf("line %d\n", lineNumber); 

     line = input.nextLine(); 
     lineScanner = new Scanner(line); 
     if (line.length() < MIN_OK_LINE_LENGTH) 
      continue; 
     incrementBar(gameResult(lineScanner)); 
     barChart.showChanges(); 
    } 
    input.close(); 
    lineScanner.close(); 
} 

더 콘솔 오류 및 프로그램 코드를 게시 할 예정 내가 다시 실행할 때 예를 들어,이 얻을. 내 프로그램은 대학 자바 라이브러리의 메소드를 사용한다. 영어가 아닌 에러 메시지는 메소드에 뿌리가있다. 코드에 익숙하지 않다.

+0

프로그램에서 예외가 발생하면 *** 무엇인가 ***가 잘못되었습니다. 예외가 발생하는 이유를 이해하려면 프로그램을 디버깅하십시오. – fvu

+1

글쎄, ui.staafdiagram.StaafDiagramPanel.berekenKleur (StaafDiagramPanel.java:62)는 어떻게 생겼습니까? –

답변

1

먼저 다른 답변에 동의합니다 : 버그를 찾아 수정하고 라이브러리 관리자/작성자에게 버그 수정을 보냅니다. 당신은 심지어 당신의 교수로부터 여분의 신용을 얻을 수도 있습니다. 이 경우 ui.staafdiagram.StaafDiagramPanel의 어딘가에 잘못된 색상 값이 할당됩니다 (범위 0-255가 아님).

확인되지 않은 예외를 무시한 경우 프로그램의 어떤 부분이 손상 될지 알 수 없으므로 실제로 의 내용이 모두 일 수 있습니다!

그러나 데모가있을 수 있으며 시간 내에 버그를 찾을 수 없습니다. 예외는 일반적으로 stderr로 인쇄된다, 그래서 당신은 완전히 표준 에러의 출력을 무시할 수 :

System.setErr(new PrintStream(new OutputStream() { 
    public void write(int b) throws IOException { 
     //nothing 
    } 
})); 
throw new RuntimeException("test"); //this should not be printed, ever. 

이 모든 예외를 삼키는하고 프로그램이 단지 경고없이 원인을 인쇄하지 않고 실패 할 수 있음을 유의하십시오.

3

오류 메시지는 범위를 벗어난 빨간색 구성 요소 값으로 java.awt.Color 생성자가 호출되었음을 나타냅니다. Color에 대한 javadoc을 보면 빨간색이 8 비트 값, 즉 0-255 사이에 있음을 알 수 있습니다. 코드에서 색상을 나타내는 무언가를 찾고 왜이 범위에서 (적어도) 적색을 나타내는 색상을 제공하는지 알아보십시오. 무언가가 데이터를 읽거나 무작위로 색상 값을 생성하는 경우 일관된 시간에 색상이 왜 발생하지 않는지를 설명합니다.

값이 int 또는 float 일 수 있습니다. 다시 말하면 Color의 다른 생성자를보고 예상되는 것을 알려줍니다. 그리고 우리는 녹색과 파란색의 색상이 유효하다는 것을 알지 못합니다. 단지 빨강이 아닙니다.

+0

Upvoted, 비록 그것이 현재의 질문에 답하지 않더라도. – jmiserez

+1

예, "모든 오류를 찾아 내고 싶습니다"로 다시 해석했습니다. 나는 단지 "오류가 사라 지길"하는 것이 현실적이라고 생각하지 않는다. OP는 마술을 희망하지 않았기를 희망한다. – arcy

관련 문제