尝试在JTable中单击链接时,未处理的异常类型URISyntaxException

时间:2014-05-26 12:23:29

标签: java swing compiler-errors

目的是使链接在jtable中可点击,以便当用户点击链接时,在浏览器中打开所需的页面。从数据库中获取的项目之一是链接,我的尝试是使其处于活动状态并可单击。我收到错误

Unhandled exception type URISyntaxException 

对于我的代码中的行:

final URI uri = new URI("http://www.roseindia.net");

即使我把它放在try catch块中,错误也似乎无法解决。而不是在try-catch块中包围,我得到错误

Cannot refer to a non-final variable uri inside an inner class defined in a different method 

那么可能的解决方案和解决方案是什么?

 public  class JTableButtonMouseListener extends MouseAdapter
    {
        private final JTable table;

        public JTableButtonMouseListener(JTable table)
        {
            this.table = table;
        }

        public void mouseClicked(MouseEvent e) {
            counter=0;
        //  System.out.println("***************************************************************");
            System.out.println("counter value="+counter++);
            //System.out.println("/////////////////////////////////////////////////////////////////////");
            int column = table.getColumnModel().getColumnIndexAtX(e.getX());
            int row    = e.getY()/table.getRowHeight(); 

            if (row < table.getRowCount() && row >= 0 && column < table.getColumnCount() && column >= 0) {
                Object value = table.getValueAt(row, column);
              //  System.out.println("row clicked="+row);
                //System.out.println("column clicked="+column);
                System.out.println("object value="+value);
                System.out.println(".............................................................");
              /* public void getsecname(String s)
                {
                    String ss=s;
                }*/
                if(table.getValueAt(row, 4)!=null)
                {
                    Object ob = table.getValueAt(row, 4);
                    String link_string=ob.toString();
                    // final URI uri = null;
                    // URI uri;
                     try{
                            final URI uri = new URI("http://www.roseindia.net");
                        } 
                     catch (URISyntaxException e1)
                     {
                            e1.printStackTrace();
                        }


                    System.out.println(".....................");
                      ((AbstractButton) ob).addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent e) {
                                    if (Desktop.isDesktopSupported()) {
                                            Desktop desktop = Desktop.getDesktop();
                                            try {
                                                    desktop.browse(uri);
                                                  //  button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

                                                   // desktop.setCursor(new Cursor(Cursor.HAND_CURSOR));
                                            } catch (Exception ex) {
                                            }
                                    } else {
                                    }
                            }


                    });


                }

              //  String link_string=ob.toString();
            //ob.setClickable(true);

                if(value==null)
                {
                    Object v=table.getValueAt(row, 1);
                    //System.out.println("--------------------------------------------");

                     s = v.toString();


                       jmenu_frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                            jmenu_frame.setContentPane(new ListModelExample(s));
                            jmenu_frame.setSize(260, 200);

                     jmenu_frame.setVisible(true);

                     jmenu_frame.setLocationRelativeTo(null);
                     //it ends here
                }
                if (value instanceof JButton) {
                    ((JButton)value).doClick();
                }
            }
        }

    }

2 个答案:

答案 0 :(得分:1)

告诉您的是,您需要try catch块来处理URISyntaxException

final URI;
try{
    uri = new URI("http://www.roseindia.net");
} catch (URISyntaxException e) {
    e.printStackTrace();
}

要解决uri cannot be resolved to a variable您可以使用try catch而不是throws URISyntaxException,而是在uri声明{{1}}的方法中添加{{1}}。但我认为这不是一个好习惯。也许它适用于你的情况。

答案 1 :(得分:1)

你不能在你的内部类中使用非final变量。 Discussion

if(table.getValueAt(row, 4)!=null)
    {
        Object ob = table.getValueAt(row, 4);
        String link_string=ob.toString();

        try {
            final URI uri = new URI("http://www.roseindia.net");
            System.out.println(".....................");

            ((AbstractButton) ob).addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if (Desktop.isDesktopSupported()) {
                        Desktop desktop = Desktop.getDesktop();
                        try {
                            desktop.browse(uri);
                            //button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
                            // desktop.setCursor(new Cursor(Cursor.HAND_CURSOR));
                        } catch (Exception ex) {
                        }
                    }
                }
            });
        } catch (URISyntaxException e1) {
           e1.printStackTrace();
        }
    }