2011-09-02 53 views
-2

這不會給我任何錯誤,但是當我編譯它返回(我做了聲明所有的變量/數組):什麼不對的Java代碼的?

線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); 
} 
} 
+0

凡'files'設置?確保在使用它們之前,listOfFiles和文件實際上已被設置。 – Nicholas

+0

它給你當你編譯例外?或者當你嘗試運行它? – highlycaffeinated

+0

您提供的哪一行代碼對應於錯誤的第48行? –

回答

3

Listoffiles沒有實例或文件。很難說,因爲我們不知道第48行是什麼。更新。有了您的新代碼modmaker無法找到,這就是爲什麼它是空的。你可能想/ modmaker

+0

這是,只是沒有在給出的代碼... – Jeff

+0

你能告訴我們代碼 – Woot4Moo

+3

@傑夫 - 很遺憾,我們沒有ESP。沒有完整的堆棧跟蹤和代碼,我們只能猜測。 –

0

看起來listOfFiles爲空。在循環之前

添加復:

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

在48行listOfFilesnull。它被定義爲

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

Java API docs:

public File[] listFiles() 

返回:抽象路徑名錶示此抽象路徑名錶示的目錄中的文件和目錄 的數組。如果目錄是空的 數組將爲空。 如果此 抽象路徑名不表示目錄,或者發生I/O錯誤 ,則返回null。

這似乎是你的錯誤...

+1

整個檢查結果是* so *超過額定這幾天... –

+0

除了讀取異常消息並嘗試檢查它們爲什麼被拋出... – Matten

1
folder.listOfFiles(); 

沒有返回回一個數組,它返回這一點是很空。所以當你點擊時

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

將文件arrray,listOfFiles分配給null。上線48

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

這意味着該行

listOfFiles.length 

拋出一個空指針異常的子部分,因爲你剛纔問的

'null'.length 

和空沒有任何方法或屬性讀。