Jar给出空指针异常java程序

时间:2014-11-01 21:52:35

标签: java eclipse jar scale executable-jar

我写了一个为朋友调整图像大小的程序,如果我用eclipse编译它似乎正在工作它只调整正在执行程序的所有图像并在那里创建一个新目录并将新的缩放图像保存到夹。

但是当我在java中导出它时,我得到一个空指针异常指向

的行
 "  for (File file : allSubFiles) {"

帮助pelase

public class Sample {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub

    String a = (Sample.class.getProtectionDomain().getCodeSource().getLocation().getPath());
    File dir = new File(a+"resized");
    dir.mkdir();

    System.out.println(a);
    File tempfile = new File(a); 
      File[] allSubFiles=tempfile.listFiles();

      for (File file : allSubFiles) {
          if(file.isDirectory())
          {

          }
          else
          {
              String temp = file.getAbsolutePath();
              String substr = temp.substring(temp.length() - 3);
              //System.out.println(substr);
              if(substr.equals("png") || substr.equals("gif") || substr.equals("jpg") || substr.equals("bmp") )
              {
              //System.out.println(file.getAbsolutePath()+" is file");
              BufferedImage bufimage = ImageIO.read(file);
              BufferedImage newImage = new BufferedImage(90, 90, BufferedImage.TYPE_INT_RGB);

              Graphics g = newImage.createGraphics();
              g.drawImage(bufimage, 0, 0, 90, 90, null);
              g.dispose();

              File outputfile = new File(a+"resized/"+file.getName());
              ImageIO.write(newImage, "png", outputfile);
              }
          }
      }


}

 }

2 个答案:

答案 0 :(得分:2)

由于我无法在这里发表评论(信誉不足)。

请尝试

Sample.class.getProtectionDomain().getCodeSource().getLocation().toURI().g‌​etPath()

如果不起作用,请检查tempfile是否指向有效目录(isDirectory())。程序的输出是什么(System.out)?在某些情况下,方法listFiles()可能会返回null。

从文件的javadoc(javadoc):

  

返回:           一组抽象路径名,表示此抽象路径名表示的目录中的文件和目录。该   如果目录为空,则数组将为空。 如果是这样,则返回null   abstract pathname不表示目录,或者表示I / O错误   发生

答案 1 :(得分:0)

我相信如果tempfile不是目录,就会发生这种情况。根据{{​​1}} API,如果表示的文件不是目录,File将返回null。

此外,由于jar文件是类文件和其他文件的压缩包,因此您可以尝试使用listFiles()的父文件。在eclipse中,类文件实际上是在一个目录中,但在jar文件中它们不是。 tmpFile可能返回jar文件的路径而不是jar文件所在的目录。使用父文件应该是jar所在的目录。在创建新目录时也要这样做{{ 1}}。尝试这样的事情。

Sample.class.getProtectionDomain().getCodeSource().getLocation().getPath()