2013-03-11 5 views
1

도형을 가져온 도형을 기반으로 그래픽을 그릴 때이 기하 도형의 행이 선택된 경우 색상을 변경하려고합니다. 행을 선택할 때마다이 오류가 발생합니다. 여기에 로그 파일이 있습니다. : 사전 여기그래픽 그리기 방법으로 모양 그리기?

 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at com.vividsolutions.jump.workbench.ui.renderer.java2D.Java2DConverter.toShape(Java2DConverter.java:313) 
at com.vividsolutions.jump.workbench.ui.plugin.specific.SearchPropertiesPlugin$2.valueChanged(SearchPropertiesPlugin.java:144) 
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167) 
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147) 
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194) 
at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:388) 
at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:398) 
at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:442) 
at javax.swing.JTable.changeSelectionModel(JTable.java:2352) 
at javax.swing.JTable.changeSelection(JTable.java:2421) 
at javax.swing.plaf.basic.BasicTableUI$Handler.adjustSelection(BasicTableUI.java:1085) 
at javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(BasicTableUI.java:1008) 
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:263) 
at java.awt.Component.processMouseEvent(Component.java:6294) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3275) 
at java.awt.Component.processEvent(Component.java:6062) 
at java.awt.Container.processEvent(Container.java:2039) 
at java.awt.Component.dispatchEventImpl(Component.java:4660) 
at java.awt.Container.dispatchEventImpl(Container.java:2097) 
at java.awt.Component.dispatchEvent(Component.java:4488) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4233) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166) 
at java.awt.Container.dispatchEventImpl(Container.java:2083) 
at java.awt.Window.dispatchEventImpl(Window.java:2489) 
at java.awt.Component.dispatchEvent(Component.java:4488) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:668) 
at java.awt.EventQueue.access$400(EventQueue.java:81) 
at java.awt.EventQueue$2.run(EventQueue.java:627) 
at java.awt.EventQueue$2.run(EventQueue.java:625) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
at java.awt.EventQueue$3.run(EventQueue.java:641) 
at java.awt.EventQueue$3.run(EventQueue.java:639) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:638) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

에서 덕분에 그것은 트레인 보르 네스 (이름, X, Y)

 searchProperties.getBornesTable().getSelectionModel().addListSelectionListener(new ListSelectionListener(){ 

    @Override 
    public void valueChanged(ListSelectionEvent e) { 

     try { 

      if (search()!= null){ 
     // here's the line 144 in toShape() method  
      final Shape shape = context.getLayerViewPanel().getViewport().getJava2DConverter().toShape(selectedBornes()); 
      Color color = Color.yellow; 
      Stroke stroke =new BasicStroke(5, BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND); 
      final Graphics2D graphics = (Graphics2D) context.getLayerViewPanel().getGraphics(); 
      graphics.setColor(color); 
      //graphics.setXORMode(Color.white); 
      graphics.setStroke(stroke); 
      graphics.fill(shape); 

      } 
      else 
        JOptionPane.showMessageDialog(null, "vous n'avez pas selectionner une bornes "); 

     } catch (NoninvertibleTransformException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 




    } 

    }); 

여기에 들어있는 bornesTable의 수신기에서 발생,이 오류에 의해 해당 코드의 라인입니다 메서드 : selectedBornes()

public Geometry selectedBornes() { 

    if (getSelectedRowIndex()> 0) 
    { 
    Geometry geometry; 
    geometry = searchBorne().get(getSelectedRowIndex()).getGeometry(); 
    return geometry; 
    } 
    return null; 

} 

0과 방법 serchBornes()가이 아무 문제가 없다하지만 난 그것을

private List<BasicFeature> searchBorne() { 

    final List<BasicFeature> basicFeatureBornes = new ArrayList<BasicFeature>(); 

    for(BasicFeature basicFeature : BornesList) { 

       if (searchProperties.getNumTextField().getText().equals(basicFeature.getString("num")) && 
         searchProperties.getComplementComboBox().getSelectedItem().equals(basicFeature.getString("complement"))) 
        basicFeatureBornes.add(basicFeature); 


        } 
    return basicFeatureBornes; 

} 

을 게시 할 수 있습니다 및 방법 getSelectedRowIndex은()도이 아무 문제가 없다,하지만 난 그것을

을 게시합니다
public int getSelectedRowIndex() { 

    int row = 0; 
    for(int i = 0; i < searchBorne().size() ; i++) { 

      row = searchProperties.getBornesTable().getSelectedRow(); 

    } 

    return row; 

} 

답변

2
public Geometry selectedBornes() { 
    if (getSelectedRowIndex()> 0) 
    { 
    Geometry geometry; 
    geometry = searchBorne().get(getSelectedRowIndex()).getGeometry(); 
    return geometry; 
    } 

선택된 인덱스 (첫번째 요소) 0이면 어떻게됩니까? null를 돌려 주어, 메소드가 크래쉬합니다. 아무 것도 선택되지 않은 경우 사례를 처리하는 수표를 추가하십시오. 여기

3
final Shape shape = context.getLayerViewPanel().getViewport().getJava2DConverter().toShape(selectedBornes()); 

직접 toShape 방법에 selectedBornes() 값을 전달하는 있지만 rowIndex에이 너무

으로 코드를 변경 선택하지 않은 경우 당신은 NullPointerException을 얻을 결과로 selectedBornes() 값이 null인지 여부를 확인하거나하지 않았다
Goemetry newGometry=selectedBornes(); 
if (newGometry !=null){ 
final Shape shape = context.getLayerViewPanel().getViewport().getJava2DConverter().toShape(newGometry); 
} 
+0

고맙습니다 youu –

+0

좋은 tat 당신이 그것을 해결할 환영합니다 :) – Lakshmi