2016-12-05 1 views
-1

버튼을 만들어 선택한 픽셀 색상을 복사합니다. 그림을 클릭 (픽셀 값 가져 오기) 한 다음 "복사"버튼을 클릭하면 정상적으로 작동합니다. 그러나 "복사"버튼을 먼저 클릭하면이 오류가 표시됩니다. 의견이 있으십니까?"AWT-EventQueue-0"스레드의 예외 java.lang.IllegalArgumentException, 이유가 무엇입니까?

if (selectedB == null) { 
    // code bellow throws your exception... 
    throw new IllegalArgumentException("cannot be null"); //line 81 
} 

당신의 문제는 당신이 확인할 수 있습니다 해결하기 위해 모델이 여기에 null의 경우 : 당신은 바로 여기에 그것을 던져 때문에

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Pixel value is null 
    at a9.ImageEditorController.copy(ImageEditorController.java:81) 
    at a9.PixelInspectorTool.actionPerformed(PixelInspectorTool.java:95) 
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$500(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

public void copy() { 
    Pixel selectedB = model.getSelected(); 
    if (selectedB == null) { 
     throw new IllegalArgumentException("cannot be null"); //line 81 
    } 
    PaintBrushToolUI pbtUI = (PaintBrushToolUI) paint_brush_tool.getUI(); 
    pbtUI.changeView(selectedB); 
} 

public void actionPerformed(ActionEvent arg0) { 
    for (ToolButtonListener t : tList) { 
     t.copy();   // this is line 95 
     System.out.println("Copying"); 
    } 
} 
+2

명백히'model.getSelected()'의 결과는'null' 인 경우입니다. 맞습니까? –

+1

'model.getSelected()'는 분명히 null을 반환합니다. 모델의 타입을 제공하지 않는다면 왜 그것이 null을 반환 하는지를 설명하는 것이 거의 불가능할 것입니다. – VGR

+0

빨간색 버튼을 클릭하면 'model.selected'값이 설정됩니다. 그리고 버튼을 클릭하지 않은 경우 null이고, 먼저 복사를 클릭하십시오. 그래서 ... 너는 이해 못하는 부분이 있니? –

답변

0

그럼 실제로 당신이 오류 메시지가

for(ToolButtonListener t:tList) { 
    //check here if it's null for example 
    if(model.getSelected() != null){ 
     t.copy();   // this is line 95 
     System.out.println("Copying"); 
    } 
} 

또는 사본을 만들 수 있습니다. THOD는 객체가이 같은 null의 경우 확인 : 당신이 색상을 만들기 위해 다른 버튼을 클릭하기 전에 첫 번째 (복사 버튼)을 복사하는 "소스"를 가지고 있지 않기 때문에

public void copy() { 
Pixel selectedB= model.getSelected(); 
if (selectedB != null) { 
// throw new IllegalArgumentException("cannot be null"); //line 81 

    PaintBrushToolUI pbtUI = (PaintBrushToolUI)paint_brush_tool.getUI(); 
    pbtUI.changeView(selectedB); 
} 

} 이 오류가 발생합니다. 다른 단추를 클릭 할 때까지 복사 단추를 비활성화 할 수도 있습니다. 당신의 문제에 대한 해결책은 다양합니다 (아마도 제 것보다 훨씬 낫습니다) 그리고 그것은 당신이 성취하고자하는 효과에 달려 있습니다.

+0

대단히 감사합니다! 그것은 아주 잘 작동합니다! – user6412069

관련 문제