Java应用程序在Eclipse中正常运行,但不是.jar [英] Java application runs properly in Eclipse, but not as .jar

查看:190
本文介绍了Java应用程序在Eclipse中正常运行,但不是.jar的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个使用iText创建4个PDF文件的Java应用程序。在创建具有图像的PDF的那个文件中,.jar创建一个0字节的文件,并且不会继续执行。但是,当我右键单击>>运行为>> Java应用程序,它的工作很好。要创建该jar,我正在执行以下

I'm creating a Java app that creates 4 PDF files using iText. On the one that creates a PDF with an image in it, the .jar creates a 0 byte file and does not continue execution. However, when I Right Click >> Run As >> Java Application, it works just fine. To create the jar, I'm doing the following


  • 右键单击src

  • 导出

  • 可运行的JAR文件

  • 将所需的库解压缩到生成的JAR中

  • 完成

  • Right click src
  • Export
  • Runnable JAR file
  • Extract required libraries into generated JAR
  • Finish

文件penguin.jpg位于src目录下。

And the file "penguin.jpg" is under the src directory.

这是我的代码

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileOutputStream;

public class ITextHelloWorld 
{
    public ITextHelloWorld() throws Exception
    {
        // Create the new document objects
        Document helloWorld = new Document();
        Document bigHello = new Document();
        Document linux = new Document();
        Document tables = new Document();


    /**********************************************************
                        start Big Hello.pdf
    This document is a huge document of text. Approximately 
    28 million characters, 24,391 pages, and 9.5 MB.
     **********************************************************/
    PdfWriter.getInstance(bigHello, new FileOutputStream("Big Hello.pdf"));
    bigHello.open();

    for (int i=0; i <1000000; i++)
    {
        bigHello.add(new Paragraph("Hello World. It's me again."));
    }

    bigHello.close();
    /**********************************************************
                        end Big Hello.pdf
     **********************************************************/

    /**********************************************************
                        start Tables.pdf
    This document will have tables in it
     **********************************************************/

    PdfWriter.getInstance(tables, new FileOutputStream("Tables.pdf"));
    tables.open();

    PdfPTable table=new PdfPTable(4);
    for (int i = 1; i<100; i++)
    {       
        table.addCell("This is cell #" + i + ".\n");
    }

    tables.add(table);
    tables.close();
    /**********************************************************
                        end Tables.pdf
     **********************************************************/

    /**********************************************************
                        start Linux.pdf
    This is a document that has text, graphics, and links.
     **********************************************************/
    PdfWriter.getInstance(linux, new FileOutputStream("Graphics and Text.pdf"));
    linux.open();       
    Image image = Image.getInstance("penguin.jpg");
    linux.add(image);

    linux.add(new Paragraph("Let's talk about Linux. \n\n" +
            "Linux (commonly pronounced /ˈlɪnəks/ LIN-əks in American English, also pronounced " +
            "/ˈlɪnʊks/ LIN-ooks in Europe and Canada) refers to the family of Unix-like computer " +
            "operating systems using the Linux kernel. Linux can be installed on a wide variety of " +
            "computer hardware, ranging from mobile phones, tablet computers and video game consoles, " +
            "to mainframes and supercomputers. Linux is predominantly known for its use " +
            "in servers; in 2009 it held a server market share ranging between 20–40%. Most desktop " +
            "computers run either Microsoft Windows or Mac OS X, with Linux having anywhere from a " +
            "low of an estimated 1–2% of the desktop market to a high of an estimated 4.8%. " +
            "However, desktop use of Linux has become increasingly popular in recent years, partly " +
            "owing to the popular Ubuntu, Fedora, Mint, and openSUSE distributions and the emergence" +
            " of netbooks and smartphones running an embedded Linux."));

    linux.close();
    /**********************************************************
                        end Linux.pdf
     **********************************************************/

    /**********************************************************
                        start Hello World.pdf
    This document is one line of text.
     **********************************************************/
    PdfWriter.getInstance(helloWorld, new FileOutputStream("Hello World.pdf"));
    helloWorld.open();
    helloWorld.add(new Paragraph("Hello World. It's me again."));
    helloWorld.close();
    /**********************************************************
                        end Hello World.pdf
     **********************************************************/

}

public static void main (String args[])
{
    try
    {
        new ITextHelloWorld();
    }

    catch (Exception e)
    {
        System.out.println(e);
    }
}

}

感谢任何帮助!

Thomas

Thanks for any help!
Thomas

推荐答案

在这一行中:

Image image = Image.getInstance("penguin.jpg");

由于这是在src目录中,所以最终将在JAR文件中。但是,您不能直接从JAR文件加载文件,只需要文件名。

Since this is in the src directory, it's going to end up in the JAR file. However, you can't directly load files from a JAR file with just the filename.

但是, Image.getInstance 超载,需要一个 URL ,这样做很简单:

However, Image.getInstance has an overload that takes a URL, which makes this rather easy:

Image image = Image.getInstance(this.getClass().getResource("/penguin.jpg"));

/是src目录或jar文件的根目录,而不是文件系统根目录你想知道的情况。

/ is the root of the src directory or jar file(s), not the filesystem root, in case you're wondering.

这篇关于Java应用程序在Eclipse中正常运行,但不是.jar的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆