-2

try-catchをパブリックメソッドで囲み、必要に応じて呼び出す方法。

1つの画面コードでtry-catchがあります。(アプリケーション全体に対して)パブリックになっているメソッドを呼び出して、別の画面から呼び出したいと思います。

出来ますか ?もしそうなら、どのように。

ご案内ください。

ここに画像の説明を入力してください

再編集:

以下のコードに見られるように、2番目のタブペインの実装が示されています。ネイティブ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

あなたの質問はまだ不可解です。検索を実行するコードがあり、その結果を JPanel という名前の JPanel に公開するとし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.
                }
            }
        });

これにより、ボタンをクリックしたときに検索機能をトリガーし、発生する例外を処理できるようになります。

編集:

公開するためにペイン2に含まれる別のtry-catch(最初から実行され続けます。つまり、検索ボタンのアクションリスナーが実行されるのを待ちません)`

何かを無期限にループさせることは、基本的に何もせずに CPU サイクルを消費するため、理想的には避けるべきものです。これにより、通常、アプリケーションが消費するリソースが増加し、GUI がハングする可能性もあります。私があなたの場所にいる場合panel2、検索を行ったら呼び出すよりも更新するメソッドがあります。

そうは言っても、印刷する必要があるものを含む文字列などの中間変数を持つことができ、検索メソッドはこの中間変数を継続的に更新します。

于 2012-05-18T08:15:50.087 に答える
0

このアプローチはお勧めしません。

メソッドの周りに一般的な周囲の try-catch ブロックを配置する代わりに、この方法で処理する各メソッドの宣言に "throws" 句を追加することを検討してから、それらすべての例外を上位層で処理する必要があります。

于 2012-05-18T08:10:26.897 に答える