-2

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

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

可能吗 ?如果有怎么办。

请指导。

在此处输入图像描述

重新编辑:

如以下代码所示,第二个选项卡窗格实现已显示,请忽略与本机 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 );

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

4

2 回答 2

2

你的问题仍然很神秘。我假设您有一些代码可以进行一些搜索,然后将结果发布到一些名为pane2. 您想要的是,一旦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 (您可以在此处找到更多信息)。

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.
                }
            }
        });

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

编辑:

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

无限期地循环是最好避免的事情,因为这会消耗 CPU 周期,而基本上什么都不做。这通常会增加您的应用程序消耗的资源,并且还可能导致您的 GUI 挂起。如果我在你那里我会有一些更新的方法,panel2而不是在你完成搜索后调用。

话虽如此,您可能有一些中间变量,例如包含您需要打印的任何内容的字符串,并且您的搜索方法会不断更新此中间变量。

于 2012-05-18T08:15:50.087 回答
0

不推荐这种方法。

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

于 2012-05-18T08:10:26.897 回答