0

私はEclipseでまったく新しいもので、次のような他のメソッドから変数を呼び出すことに問題があります:

    btnNewButton.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {

            final JFileChooser fc = new JFileChooser();
            int returnVal = fc.showDialog(fc, null);

            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File prnfile = new File(fc.getSelectedFile().toString());

            }

        }

    });
    btnNewButton.setBounds(54, 164, 89, 23);
    frame.getContentPane().add(btnNewButton);

    JButton btnNewButton_1 = new JButton("print");
    btnNewButton_1.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {


              File file = new File(prnfile);
                int ch;
                StringBuffer strContent = new StringBuffer("");
                FileInputStream fin = null;
                try {
                  fin = new FileInputStream(file);
                  while ((ch = fin.read()) != -1)
                    strContent.append((char) ch);
                  fin.close();
                } catch (Exception e1) {
                  System.out.println(e);
                }



    });
    btnNewButton_1.setBounds(257, 164, 89, 23

さて、どうすれば他のメソッドから「prnfile」を呼び出すことができますか?通常、私はc#でパブリックオブジェクトを作成しますが、Eclipseでは機能しません。

4

3 に答える 3

3

あなたがする必要があるのは、prnFile refrence を持ち上げてグローバル変数にすることです。現在書かれているように、prnFile は単なるローカル変数であり、別のメソッドでその変数を確認することはできず、作成後に GC によって収集されます。だから、この部分を取ります:

File prnfile = new File(fc.getSelectedFile().toString());

File prnFile;メソッドの外に移動します。最初のリスナー内で呼び出すだけで、「印刷リスナー」からprnFile= new File(fc.getSelectedFile().toString());内部に格納されている値を取得できるようになりますprnFile

于 2012-04-10T09:45:27.773 に答える
1

オブジェクトにアクセスすることを意味していると思いますが、それは日食とは何の関係もありません。

オブジェクト prnfile は匿名クラス内にあります。匿名クラスの外で変数を定義すれば問題ありません。

于 2012-04-10T09:43:51.860 に答える
1

prnfileはmouseClickedのifブロックのローカル変数であるため、制御がそのifブロックから出ると、prnfileはガベージ コレクションされ、その参照はなくなります。そのため、if ブロックの外からアクセスすることはできません。

于 2012-04-10T09:44:27.853 に答える