java - 无法声明类字段

标签 java class field

我们正在尝试将变量 file 传递给另一个类。我们在这些线路上遇到了问题:

file = (File) item;

        listModel.addElement(file);

在类(class)的开始,我们声明了字段file,我们认为它可以在整个类(class)中使用。但是,当我们到达提到的行时,我们得到了错误file无法解析为变量 如果我们将 file 设为局部变量,则该类可以正常工作,但是我们不能将变量 file 传递给另一个类。

代码如下:

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.*;

@SuppressWarnings("serial")
public class FileDragDemo extends JPanel {
    public static File file;
    public static List data;
    public JList list = new JList();


    public FileDragDemo() {
        list.setDragEnabled(true);
        list.setTransferHandler(new FileListTransferHandler(list));

        add(new JScrollPane(list));

    }

    public static void createAndShowGui() {
        FileDragDemo mainPanel = new FileDragDemo();

        JFrame frame = new JFrame("FileDragDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) throws Exception {

        //String filestring ="";
        //data = new List;

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();
                PdfEasyManager PdfEasyManagerObject = new PdfEasyManager();
                try {
                    PdfEasyManagerObject.main(args);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }
}

@SuppressWarnings("serial")
class FileListTransferHandler extends TransferHandler {
    public JList list;

    public FileListTransferHandler(JList list) {
        this.list = list;
    }

    public int getSourceActions(JComponent c) {
        return COPY_OR_MOVE;
    }

    public boolean canImport(TransferSupport ts) {
        return ts.isDataFlavorSupported(DataFlavor.javaFileListFlavor);
    }

    public boolean importData(TransferSupport ts) {
        try {
            @SuppressWarnings("rawtypes")

            List data = (List) ts.getTransferable().getTransferData(
                    DataFlavor.javaFileListFlavor);
            if (data.size() < 1) {
                return false;
            }// close if

            DefaultListModel listModel = new DefaultListModel();

            for (Object item : data) {

                file = (File) item;

                listModel.addElement(file);

            } // close for
            //String filestring = file.toString();

            list.setModel(listModel);
            return true;

        }// close try  
        catch (UnsupportedFlavorException e) {
            return false;
        } catch (IOException e) {
            return false;
        }
    }
}

最佳答案

静态字段file 在类FileDragDemo 中声明。但是,您使用它的行位于另一个名为 FileListTransferHandler 的类中。如果您想在此类的方法中访问它,您必须使用声明类限定字段访问:FileDragDemo.file

但是,在您发布的代码中,我认为使用这个静态变量似乎不太优雅,我会在这里使用局部变量。通常可以而且应该避免使用静态变量。

关于java - 无法声明类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34969302/

相关文章:

java - 循环中 java.util.Map.putAll(Map<>) 和 java.util.Map.put(Integer, Object) 有什么区别

java - 如何在Spring中使用CommandLineRunner测试JPA实体?

php - 带有IP地址的Mysql查询无法插入数据库

javascript - 如何跟踪是否使用 javascript 选择了文件?

java - 音频访问限制

java - 使用 Spring 4.0 的新 ListenableFuture 和回调 - 奇怪的结果

c++:为什么整数前面的减号会给出一个疯狂的数字?

nhibernate - 使用 Fluent nHibernate 混合继承和树结构

c# - 类中的 ASP.Net C# ResolveClientUrl

mongodb - 在 MongoDB 中使用动态字段名称进行搜索