2016-12-05 7 views
-1

私は、選択したピクセルの色をコピーするボタンを作成します。 最初に画像をクリック(ピクセル値を取得)した後、「コピー」ボタンをクリックすると問題なく動作します。しかし、最初に「コピー」ボタンをクリックすると、このエラーが表示されます。 考えていますか?スレッド「AWT-EventQueue-0」の例外java.lang.IllegalArgumentException、なぜですか?

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を返しています。 'model'の型を私たちに提供しない限り、nullを返す理由を説明することはほとんど不可能になります。 – VGR

+0

明らかに赤いボタンをクリックすると、 'model.selected'の値が設定されます。ボタンをクリックせずに最初にコピーをクリックするとnullです。だから...あなたは理解していない部分は? –

答えて

0

あなたはまさにここにそれを投げるので、まあ実際には、このエラーメッセージが表示されます。

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

あなたの問題を解決するために、あなたのモデルがここにnullであるかどうかをチェックすることができます:

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"); 
    } 
} 

または、コピーを私にすることができますオブジェクトは、このようなnullであるかどうかを確認するためにTHOD:あなたが最初のもの(コピーボタン)の色を作成するために、他のボタンをクリックする前にすると、コピー元の「ソース」を持っていないため

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

関連する問題