2014-03-27 22 views
0

我有問題通過使用方法Toolkit.getDefaultToolkit()。getImage(filename); MediaTracker返回false這意味着沒有圖像加載不是?如何解決這個問題呢?提前致謝。下面是我的代碼:無法使用方法Toolkit.getDefaultToolkit()。getImage(filename)從文件名加載圖像;

在doPost方法:

//process only if it is multipart content 
    if(ServletFileUpload.isMultipartContent(request)){ 
     try { 
      List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); 

      for(FileItem item : multiparts){ 
       if(!item.isFormField()){ 
        String name = new File(item.getName()).getName();      

        item.write(new File(UPLOAD_DIRECTORY + File.separator + name)); 

        BufferedImage thumbImage = getThumbnail(name, 200, 120, 0, name);    
        File outputfile = new File(UPLOAD_DIRECTORY + File.separator + "2"+name); 
        ImageIO.write(thumbImage, "jpg", outputfile); 

       } 
      } 

getThumbnail方法:

private static BufferedImage getThumbnail(String filename, int thumbWidth, int thumbHeight, int quality, String outFileName) 
throws InterruptedException, FileNotFoundException, IOException { 

//load image from filename 
Image image = Toolkit.getDefaultToolkit().getImage(filename); 
MediaTracker mediaTracker = new MediaTracker(new Container()); 
mediaTracker.addImage(image, 0); 
mediaTracker.waitForID(0); 
// use this to test for errors at this point: 
System.out.println(mediaTracker.isErrorAny()); 

//determine thumbnail size from WIDTH and HEIGHT 
double thumbRatio = (double)thumbWidth/(double)thumbHeight; 
int imageWidth = image.getWidth(null); 
int imageHeight = image.getHeight(null); 
double imageRatio = (double)imageWidth/(double) imageHeight; 
if (thumbRatio < imageRatio){ 
    thumbHeight = (int)(thumbWidth/imageRatio); 
    } else{ 
     thumbWidth = (int)(thumbHeight * imageRatio); 
    } 

//draw original image to thumbnail image object and 
//scale it to the new size 
BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB); 
Graphics2D graphics2D = thumbImage.createGraphics(); 
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null); 

//save thumbnail image to outFileName 
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outFileName)); 
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage); 
quality = Math.max(0, Math.min(quality, 100)); 
param.setQuality((float)quality/100.0f, false); 
encoder.setJPEGEncodeParam(param); 
encoder.encode(thumbImage); 
out.close(); 

return thumbImage; 

} 

回答

0

不應該

BufferedImage thumbImage = getThumbnail(name, 200, 120, 0, name);

BufferedImage thumbImage = getThumbnail(UPLOAD_DIRECTORY + File.separator + name, 200, 120, 0, name);

0
Image img = Toolkit.getDefaultToolkit().getImage(URL or file path); 

該工具包是在java.awt包中提供各種資源和工具類用於顯示系統。其中一種工具包方法是getImage(),其功能與Applet類中的getImage()方法非常相似。它被重載以獲取指定圖像文件位置的String文件名參數或標識圖像文件的URL參數。

在調用getImage()之前,必須引用正在使用的Toolkit實例。靜態方法Toolkit.getDefaultToolkit()返回對該工具包的引用。

+0

哦,謝謝@brijesh k。所以我現在的問題,因爲我沒有指定的目錄,這就是爲什麼圖像無法加載:) –