Что не так с этим кодом Java? - PullRequest
       12

Что не так с этим кодом Java?

0 голосов
/ 02 сентября 2011

Это не дает мне никаких ошибок, но когда я компилирую, он возвращает (Я ДЕЙСТВИТЕЛЬНО объявлял все переменные / массивы):

строка 48:

for (int i = 0; i < listOfFiles.length; i++)

Исключение впоток "основной" java.lang.NullPointerException в modmaker.GuiBlocks2.main (GuiBlocks2.java:48)

package modmaker;

import java.awt.EventQueue;

public class GuiBlocks2 extends JFrame {
/**
 * 
 */
private static final long serialVersionUID = 1L;
public JFileChooser filePath;
FileEditor fileeditor = new FileEditor();
/**
 * Launch the application.
 */
static String files;
static String fileList = "";
static String path = "ModMaker"; 
static File folder = new File(path);
static File[] listOfFiles = folder.listFiles(); 
String[] allFile = fileList.split(":");
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                GuiBlocks2 frame = new GuiBlocks2();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    // Directory path here
    for (int i = 0; i < listOfFiles.length; i++) 
    {

    if (listOfFiles[i].isFile())
    {

        if (files.endsWith(".png") || files.endsWith(".PNG"))
        {
            fileList += files + ":";
            files = listOfFiles[i].getName();
            System.out.println(files);
        }
    }
}
}

/**
 * Create the frame.
 */

public GuiBlocks2() {
    setTitle("Linkseyi's ModMaker");
    setBackground(Color.LIGHT_GRAY);
    getContentPane().setBackground(Color.LIGHT_GRAY);
    getContentPane().setLayout(null);


    JButton btnGenerateFiles = new JButton("Generate Files");
    btnGenerateFiles.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            fileeditor.addBlock();
        }
    });
    btnGenerateFiles.setBounds(151, 120, 123, 51);
    getContentPane().add(btnGenerateFiles);

    final JComboBox textureChooseBox = new JComboBox(allFile);
    textureChooseBox.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            String imgName = (String)textureChooseBox.getSelectedItem();
            System.out.println(imgName);
        }
    });
    textureChooseBox.setBounds(151, 75, 123, 20);
    getContentPane().add(textureChooseBox);

    JLabel label1 = new JLabel("Choose Texture");
    label1.setBackground(Color.LIGHT_GRAY);
    label1.setBounds(169, 38, 123, 14);
    getContentPane().add(label1);
    setBounds(100, 100, 450, 233);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Ответы [ 4 ]

3 голосов
/ 02 сентября 2011

В строке 48 listOfFiles равно null.Он определяется как

static File[] listOfFiles = folder.listFiles(); 

Из документов Java API:

public File[] listFiles()

Возвращает: Массив абстрактных путей, обозначающих файлы и каталоги вкаталог, обозначенный этим абстрактным путем.Массив будет пустым, если каталог пуст. Возвращает ноль, если это абстрактное имя пути не обозначает каталог или если произошла ошибка ввода-вывода.

Кажется, это ваша ошибка ...

3 голосов
/ 02 сентября 2011

Listoffiles не был создан или файлы. Трудно сказать, так как мы не знаем, что такое строка 48. Обновить. С вашим новым кодом модмейкер не может быть найден, поэтому он нулевой. Вы, вероятно, хотите / modmaker

1 голос
/ 02 сентября 2011
folder.listOfFiles();

не вернул обратно массив, он возвратил что-то, что было нулевым.Поэтому, когда вы нажимаете

static File[] listOfFiles = folder.listFiles();

массив файлов, listOfFiles присваивается значение NULL.Это означает, что в строке 48

for (int i = 0; i < listOfFiles.length; i++)

часть этой строки

listOfFiles.length

выдает исключение нулевого указателя, поскольку вы только что запросили

'null'.length

и nullне имеет методов или свойств для чтения.

0 голосов
/ 02 сентября 2011

Похоже, listOfFiles это ноль.

Добавить проверку перед циклом:

if (listOfFiles == null) {
    return;
}
...