2015-10-02 129 views
1

我想要做的是當用戶選擇一個圖像,這個圖像必須被複制到一個特定的文件夾,然後使用該圖像。java NullPointerException exists Image

這是我用它來複製圖像:

Files.copy(
    Paths.get("C:/../img.png"), 
    Paths.get("C:/../src/bgs").resolve(array[array.length-1]), 
    StandardCopyOption.REPLACE_EXISTING); 

工作正常。問題是,如果我在這個命令後立即使用映像,我得到NullPointerException(如果我在這兩個命令之間使用類似Thread.sleep(2500)的東西,我沒有這個問題)。所以基本上我需要一種方法來檢查文件是否準備好使用。

到目前爲止,我用下面的代碼

// copy file 
File f = new File(new_path); 
sout(f.exists()); 
// use file 
Image background = Toolkit.getDefaultToolkit().getImage(
    getClass().getResource("/bgs/img.png")); 

它打印真實的,但是當我使用它,我得到NullPointerException再次..任何想法?

例外:

Uncaught error fetching image: 
java.lang.NullPointerException 
    at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:115) 
    at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:125) 
    at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:263) 
    at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205) 
    at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169) 
+1

Files.copy不是Java的異步。檢查你是否實例化你的圖像錯誤。你可以發佈你的代碼實例化引起空指針的圖像嗎? – JTY

+0

檢查編輯的問題。實例化沒有錯,因爲它在代碼中被多次使用..也許Files.copy和Toolkit。不要一起工作 –

+1

你也可以發佈異常堆棧嗎?謝謝! – JTY

回答

0

我解決了這個問題,所以纔在別人面對這一點,在這裏如果有人是我做過什麼:

更換

Toolkit.getDefaultToolkit().getImage(getClass().getResource("/bgs/img.png")); 

ImageIO.read(new File("bgs/img.png")); 

be小心與路徑

「/bgs/img.png」

「BGS/img.png」

+0

換言之,該文件不是您聲稱的那個地方。 – EJP

+0

讓我這樣說..如果我再次運行前面的代碼(因此圖像已經移動到我想要的位置),它工作正常..所以它不是關於目錄(我在談論問題的代碼,包括'工具包...' –