0

I do have problem overtime I run the code I keep getting this error I'm not sure what number to put based on my understanding it should work but nothing work so far, any suggestions? Error:

2016-02-18 12:30:13.946 java[8642:1823896] *** WARNING: Method userSpaceScaleFactor in class NSWindow is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead. 
1148
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1
at test_guiiii.image_Open_nw$1$1.mouseClicked(image_Open_nw.java:81)
at java.awt.Component.processMouseEvent(Component.java:6538)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6300)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4534)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

The source code causing the problem

import java.awt.BorderLayout;        
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class image_Open_nw {

String sCurrentLine, new_string;

   public void Mouse(BufferedImage img) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
            }

            //BufferedImage img = ImageIO.read(new File("result.jpg"));
            final ImagePanel imgPane = new ImagePanel(img);
            JScrollPane scrollPane = new JScrollPane(imgPane);

            final JLabel report = new JLabel("...");

            final JButton bt = new JButton("save");
            bt.setPreferredSize(new Dimension(55,20));

            imgPane.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    Point panelPoint = e.getPoint();
                    Point imgContext = imgPane.toImageContext(panelPoint);

                    JFrame f = new JFrame();
                    f.setUndecorated(true);
                    f.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
                    f.getContentPane().setLayout(new FlowLayout());
                    //f.setAlwaysOnTop(true);

                    //report.setText("clicked at " + panelPoint + " which is relative to the image " + imgContext);

                    try (BufferedReader br = new BufferedReader(new FileReader("Coordinates.csv")))
                    {

                        while ((sCurrentLine = br.readLine()) != null) {


                             String[] anArr1 = sCurrentLine.split("\\)\\s*");
                             List<Point> points = new ArrayList<Point>();

                                    String[] anArr  = anArr1[0].split("\\(\\s*");

                                    ***int x = Integer.parseInt(anArr[1].substring(0,anArr[1].indexOf(",")));***
                                    int y = Integer.parseInt(anArr[1].substring(anArr[1].indexOf(",") + 1, anArr[1].length()));
                                    int x1 = Integer.parseInt(anArr1[2].substring(1,anArr1[2].indexOf(",")));
                                    int y1 = Integer.parseInt(anArr1[2].substring(anArr1[2].indexOf(",") + 1, anArr1[2].length()));

                                    Point p = new Point(x,y);
                                    points.add(p);

                                    String [] a0 = anArr[0].split("\\     \\s*");
                                    String [] a1 = anArr1[4].split("\\     \\s*");

                                    if(panelPoint.x > x && panelPoint.x < x1 && panelPoint.y > y && panelPoint.y < y1){


                                        JTextField Text1 = new JTextField(a0[0]);
                                        JTextField Text2 = new JTextField(a0[1]);
                                        JTextField Text3 = new JTextField(a0[2]);
                                        JTextField Text4 = new JTextField(a0[3]);
                                        JTextField Text5 = new JTextField(a0[4]);
                                        JTextField Text6 = new JTextField("  "+anArr[1]+ "  " + anArr1[1] +"  "+ anArr1[2] +"  "+ anArr1[3]);
                                        JTextField Text7 = new JTextField(a1[0]);
                                        JTextField Text8 = new JTextField(a1[1]);
                                        JTextField Text9 = new JTextField(a1[2]);

                                        Text6.setEditable(false);


                                        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                                       // f.getContentPane().setLayout(new FlowLayout());
                                        f.getContentPane().add(Text1);
                                        f.getContentPane().add(Text2);
                                        f.getContentPane().add(Text3);
                                        f.getContentPane().add(Text4);
                                        f.getContentPane().add(Text5);
                                        f.getContentPane().add(Text6);
                                        f.getContentPane().add(Text7);
                                        f.getContentPane().add(Text8);
                                        f.getContentPane().add(Text9);

                                        f.getContentPane().add(bt,BorderLayout.AFTER_LAST_LINE);                                    
                                        f.pack();

                                        f.setLocation(scrollPane .getWidth()/2 - f.getWidth()/2,scrollPane .getHeight()/4);

                                        f.setVisible(true);

                                        bt.addMouseListener(new MouseAdapter(){
                                            @Override
                                            public void mouseClicked(MouseEvent e1) {
                                                f.setVisible(false);
                                                write(panelPoint,Text1,Text2,Text3,Text4,Text5,Text6,Text7,Text8,Text9);

                                            }
                                        });

                                      }


                        }
                         br.close();

                    } catch (IOException e1) {
                        e1.printStackTrace();
                    } 
                }
            });

            JFrame frame = new JFrame("Processed Image");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(scrollPane);
            frame.add(report, BorderLayout.SOUTH);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    });
}

public void write(Point panelPoint,JTextField Text1,JTextField Text2,JTextField Text3,JTextField Text4,JTextField Text5,JTextField Text6,JTextField Text7,JTextField Text8,JTextField Text9){
    String format ="%-20s%-20s%-20s%-20s%-20s%-20s%-20s%-20s%-20s%-20s%s%n";

    try (BufferedReader br = new BufferedReader(new FileReader("Coordinates.csv")))
    {
        PrintWriter out = new PrintWriter("Coordinates_new.csv");


        while ((sCurrentLine = br.readLine()) != null) {


             String[] anArr1 = sCurrentLine.split("\\)\\s*");
             List<Point> points = new ArrayList<Point>();

                    String[] anArr  = anArr1[0].split("\\(\\s*");

                    int x = Integer.parseInt(anArr[1].substring(0,anArr[1].indexOf(",")));
                    int y = Integer.parseInt(anArr[1].substring(anArr[1].indexOf(",") + 1, anArr[1].length()));
                    int x1 = Integer.parseInt(anArr1[2].substring(1,anArr1[2].indexOf(",")));
                    int y1 = Integer.parseInt(anArr1[2].substring(anArr1[2].indexOf(",") + 1, anArr1[2].length()));

                    Point p = new Point(x,y);
                    points.add(p);

                    String [] a0 = anArr[0].split("\\     \\s*");
                    String [] a1 = anArr1[4].split("\\     \\s*");

                    if(panelPoint.x > x && panelPoint.x < x1 && panelPoint.y > y && panelPoint.y < y1){

                        out.printf(format,Text1.getText(),Text2.getText(),Text3.getText(),Text4.getText(),Text5.getText(),anArr[1], anArr1[1], anArr1[2], anArr1[3],Text4.getText(),Text5.getText(),Text6.getText());

                    }
                    else{
                        out.printf(format,a0[0],a0[1],a0[2],a0[3],a0[4],anArr[1], anArr1[1], anArr1[2], anArr1[3],a1[0],a1[1],a1[2]);  
                    }

        }
         br.close();
         out.close();

         File realName = new File("Coordinates.csv");
         realName.delete(); // remove the old file
         new File("Coordinates_new.csv").renameTo(realName); 

    } catch (IOException e1) {
        e1.printStackTrace();
    }

}
public class ImagePanel extends JPanel {

    private BufferedImage img;

    public ImagePanel(BufferedImage img) {
        this.img =img;

        int h = img.getHeight(null);
        int w = img.getWidth(null);
        int ii=0;
        int temp=0,temp1 = 0;

        for(int i=1; i< 100; i++){

             temp = h/i;
             temp1 = w/i;
             //System.out.println(temp);
             if(temp < 800){
                 ii = i;
                 i = 102;
             }

         }
           BufferedImage resizedImg = new BufferedImage(temp1, temp, BufferedImage.TRANSLUCENT);
           Graphics2D g2 = resizedImg.createGraphics();
           g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
           g2.drawImage(img, 0, 0,temp1, temp, null);
           g2.dispose();

       // this.img = resizedImg;

    }

    @Override
    public Dimension getPreferredSize() {
        return img == null ? super.getPreferredSize() : new Dimension(img.getWidth(), img.getHeight());
    }

    protected Point getImageLocation() {

        Point p = null;
        if (img != null) {
            int x = (getWidth() - (img.getWidth())) / 2;
            int y = (getHeight() - (img.getHeight())) / 2;
            p = new Point(x, y);
        }
        return p;

    }

    public Point toImageContext(Point p) {
        Point imgLocation = getImageLocation();
        Point relative = new Point(p);
        relative.x -= imgLocation.x;
        relative.y -= imgLocation.y;
        return relative;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (img != null) {
            Point p = getImageLocation();
            g.drawImage(img, p.x, p.y, this);
        }
    }

}

}

Note : the error is in line 81 I'll make it bold to be easy to find from the code

MrRizk
  • 111
  • 5
  • 14
  • 2
    Possible duplicate of [What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?](http://stackoverflow.com/questions/5554734/what-causes-a-java-lang-arrayindexoutofboundsexception-and-how-do-i-prevent-it) – 3kings Feb 18 '16 at 04:43
  • yeah I already check it haven't work yet – MrRizk Feb 18 '16 at 07:04
  • You are preparing tow arrays `anArr1` and 'anArr' on line 74 & 77 respectively by String.split("regex"). You should check the length of array before using them. To debug you can print the length and content of `anArr1` and 'anArr' – Mahendra Feb 18 '16 at 07:32

0 Answers0