【问题标题】:Java Checkers - removing Icon, java.lang.NullPointerExceptionJava Checkers - 删除图标、java.lang.NullPointerException
【发布时间】:2014-06-14 10:54:55
【问题描述】:

我的跳棋有问题,跳棋不起作用,我不知道我该怎么做才能奏效,请帮助或给我一些提示:)

public class DnD extends JFrame {

    private JPanel boardPane;
    Icon z = null;
    JLabel jlabel = new JLabel();
    String k="";
    String ballPressed="";
    String p="";

 public DnD(){
    super("Checker");

    icdim = new Dimension(greenIcon.getIconWidth() + 5, greenIcon.getIconHeight() + 5);
    boardPane = new JPanel();
    board = new JLabel[8][8];
    dragged = new JLabel();
    layers = getLayeredPane();
    mouseHandler = new MouseInputAdapter() {

 public void mouseReleased(MouseEvent mouseevent) {

            JLabel jlabel = (JLabel)mouseevent.getSource();
            Point point = jlabel.getLocation();
            Point point1 = mouseevent.getPoint();

            point.translate(point1.x, point1.y);
            Component component = boardPane.getComponentAt(point);
            JLabel jlabel1 = jlabel;

            if(hasIcon(component))
                    if(allowedMove(jlabel, component, k))
                            jlabel1 =(JLabel)component;
                    else
                        try{
                            if(bicie(jlabel,component,k))
                                jlabel1 =(JLabel)component;
                        }catch (Exception e) {
                            e.printStackTrace();
                        }
            jlabel1.setIcon(dragged.getIcon());
            dragged.setVisible(false);

        }
 };

   boolean jump(JLabel jlabel, Component component)  {
      int x = jlabel.getX();
      int y = jlabel.getY();
      int x2=  component.getX();
      int y2=  component.getY();
      String h="";

      if(ballPressed=="redIcon" && player==true && y-y2==138 && x2-x==138){
          Point point = new Point(x+69, y-69);
          JLabel l=  (JLabel) jlabel.getComponentAt(point);
          try{
          q=l.getIcon();
          h = q.toString();

            if(h=="greenIcon"){
                player = false;
                message.setText("Green");
                getComponentAt(x2+69, y2+69).setBounds(0,0,0,0);
                ((JLabel) q).setIcon(null);
              return true;

          }
      }else

    return false;
}

对于跳转,我给出了一小部分代码(仅用于 redIcon 以正确的方式),因为我想要可读。

对于线 q=l.getIcon();我得到java.lang.NullPointerException

http://s2.postimg.org/ywdxs56qx/exception.jpg

【问题讨论】:

  • 这是什么ballPressed=="redIcon"h=="greenIcon"。是否是字符串相等比较。使用String#equals() 方法。
  • ballPressed 是字符串,显示图标被拖动(红色或绿色)。但我认为这将帮助我解决我的问题。但是你是对的,应该使用 String.eguals(),非常感谢:)

标签: java nullpointerexception icons


【解决方案1】:

如果q=l.getIcon() 给出空指针,那么 l 几乎肯定是空的。您通过一些计算从 JLabel.getComponentAt() 派生 l;如果“组件不包含位置”,ge​​tComponentAt 返回 null。

【讨论】:

  • 这是否意味着它永远不会看到蓝色圆圈内的组件? s27.postimg.org/f5pdlcdgz/jump.jpg
  • 不知道什么时候调用了 jump() ;我不知道 JLabel 和 Component 的值代表什么,更不用说它们对于引发异常的调用的实际值了。我不知道这是每次都这样做还是仅在某些情况下这样做。把它放在调试器中,在 q=l.getIcon() 上停止,然后查看 x+69 和 y-69 的值,并与游戏网格上的值进行比较(我也不知道),然后查看代码试图获取组件的网格内(或外)位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多