将try-catch包含在公共方法中,并在需要时调用

时间:2012-05-18 07:56:37

标签: java try-catch

如何在公共方法中包含try-catch并在需要时调用。

我在一个屏幕代码中尝试捕获。我想通过调用一个公开的方法(对整个应用程序)从另一个屏幕调用它。

有可能吗?如果是这样的话。

请指导。

enter image description here

重新编辑:

如下面的代码所示,第二个选项卡窗格实现已经显示,请忽略可能在本机java中找到的语法差异(这已经为Blackberry JDE实现)。实现结构保持不变,因此请忽略差异并提出正确解决问题的方法。

  // setup the second tab  
  vfm = new VerticalFieldManager( 
      Field.USE_ALL_HEIGHT | Field.USE_ALL_WIDTH |
      Manager.VERTICAL_SCROLL | Manager.NO_HORIZONTAL_SCROLL );

 //Initialize grid for publishing results
  grid.add(new LabelField("Name")
    {
       public void paint(Graphics graphics)
       {
         graphics.setColor(Color.CYAN);
         super.paint(graphics);
       }
     });
    grid.add(new LabelField("Total")
    {
       public void paint(Graphics graphics)
       {
         graphics.setColor(Color.CYAN);
         super.paint(graphics);
       }
     });


    grid.setColumnPadding(100);
    grid.setRowPadding(20);


   //TRY CATCH STARTS HERE


   try
                  {
                  //Open or create the database
                    Database db = DatabaseFactory.openOrCreate("database1.db"); 

                    Statement statementG55 = db.createStatement("CREATE TABLE IF NOT EXISTS GTemp4(gname TEXT,gbal INTEGER)");
                    statementG55.prepare();
                    statementG55.execute();       
                    statementG55.close();

                    Statement statementG56 = db.createStatement("SELECT gname,gbal FROM GTemp4 ORDER BY ROWID DESC");
                    statementG56.prepare();
                    statementG56.execute();

                            Cursor c = statementG56.getCursor();

                            //Get to the row of grid
                             for (int i =1; i < grid.getRowCount(); i++)
                             {
                                    System.out.println("Inside for first loops");
                                    //Get to the column of grid
                                for (int j = 0; j < grid.getColumnCount() ; j++)
                                {
                                   System.out.println("Inside for second loops");
                                   //Get to the row of temp4 table
                                   while(c.next()) 
                                   {

                                      System.out.println("Inside while"); 
                                        Row r;
                                        r = c.getRow();


                                        for (int k = 1; k >=0; k--)
                                        {

                                            System.out.println("Inside for loops");

                                            if(k==0)
                                            {
                                                System.out.println("Retrieving Names");
                                                grid.insert(new LabelField(r.getString(k))
                                                {
                                                    public void paint(Graphics graphics)
                                                    {
                                                    graphics.setColor(Color.GOLD);
                                                    super.paint(graphics);
                                                    }
                                                 },i,j);


                                            }  
                                            else
                                            {   

                                                System.out.println("Retrieving other values"); 
                                                String p = "" + r.getObject(k);


                                                grid.insert(new LabelField(p)
                                                {
                                                    public void paint(Graphics graphics)
                                                    {
                                                    graphics.setColor(Color.GOLD);
                                                    super.paint(graphics);
                                                    }
                                                 },i,j); 



                                            }   
                                           grid.setBackground(BackgroundFactory.createLinearGradientBackground(Color.MIDNIGHTBLUE,Color.STEELBLUE,Color.MIDNIGHTBLUE,Color.STEELBLUE));



                                        } 
                                         System.out.println("Exiting while");                        
                                      }

                                      System.out.println("Exiting sec for");
                                      break;
                                  }
                                System.out.println("Exiting first for");
                                break;
                               } 
                               statementG56.close(); 
                               db.close();
                  } 
                  catch(Exception e) 
                  {         
                        System.out.println( e.getMessage() );
                        e.printStackTrace();     
                  }  

    vfm.add(grid);

  nullFld = new NullField( Field.FOCUSABLE );
  hfm = new HorizontalFieldManager();
  hfm.add( nullFld );
  hfm.add( myLbl );

  pane = new Pane( hfm, vfm );
  model.addPane( pane );

非常感谢下面提出建议的所有人。

2 个答案:

答案 0 :(得分:2)

你的问题仍然很神秘。我假设您有一些代码可以进行一些搜索,然后将结果发布到一些名为pane2的JPanel。你想要的是,一旦按下Search按钮,你就可以调用代码。

你可以有这样的方法:

public void doSomeSearching(...) throws Exception //This will allow you to remove the try/catch block from within the method and be able to catch any exceptions in the layer above.
{
     //Do the searching
     //Update panel2
}

然后,您需要做的是为您的按钮添加一个动作侦听器。这将允许在单击按钮后执行代码。 (您可以在ActionListeners here)上找到更多信息。

JButton btnSearch = new JButton("Search");
button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                try
                {
                     doSomeSearching();
                }
                catch (Exception e)
                {
                     //Do something when exception is raised.
                }
            }
        });

这应该允许您在单击按钮时触发搜索功能并处理应该出现的任何异常。

编辑:

  

另一个try-catch包含在pane2中发布(它从一开始就一直运行,即不等待搜索按钮的动作监听器被执行)``

有一些无限循环的东西应该理想地避免,因为这会消耗CPU周期而基本上什么都不做。这通常会增加应用程序消耗的资源,并可能导致GUI挂起。如果我在哪里,我会有一些更新panel2的方法,一旦你完成搜索,你就会调用它。

话虽这么说,你可以有一些中间变量,比如一个包含你需要打印的内容的字符串,你的搜索方法会不断更新这个中间变量。

答案 1 :(得分:0)

不推荐这种方法。

您应该考虑将“throws”子句添加到您希望以这种方式处理的每个方法的声明中,然后在更高层中处理所有这些异常,而不是在您的方法周围放置一个通用的try-catch块。