将应用程序打包到Jar中不会读取字体

时间:2015-08-20 02:05:02

标签: java

我正在尝试在一个JAR文件中编译所有内容。它包括清单文件,程序所需的类,以及图片和图标所在的文件夹。

jint ffmpeg_init(JNIEnv * env, jobject this) {
//....

audioContext = avcodec_alloc_context3(audioCodec);

audioContext->sample_rate = 8000;
audioContext->channel_layout = AV_CH_LAYOUT_MONO;
audioContext->channels = 1;
int openRet = avcodec_open2(audioContext, audioCodec, NULL);
if (openRet < 0) {
   LOGE("Could not open codec, error:%d", openRet);
   return -1;
}

在图形文件夹中,我有3个子文件夹:

Main.class
SubExt.class
Frame1.class
Data.class
Graphics (folder)

图标文件夹包含所有图标文件。文本文件夹包含所有使用的字体。 Bg文件夹具有程序中使用的所有背景。

我尝试在一个jar文件中编译它:

Icon
Text
Bg

如果我尝试在同一目录(图形文件夹所在的位置)上运行它,它将正常运行。但是当我尝试在不同的目录(例如桌面)上运行它时,它将无法正确显示字体,背景和图标。它只会显示一个空白的白色背景。

我的程序中没有使用绝对路径。当我在我的程序中添加Icons时,它看起来像这样:

jar cvfm PackagingJava.jar Manifest.mf *.class Graphics

另外,我的字体代码如下所示:

ImageIcon icoSub = new ImageIcon ("Graphics/Icon/a.png");

它不起作用。我该怎么办?

1 个答案:

答案 0 :(得分:0)

你应该以流动的方式访问资源

ImageIcon iconSub = new ImageIcon(ImageIO.read(getClass().getResource("/Graphics/Icon/a.png")));

对于字体,您可以使用以下方式。

InputStream is = this.getClass().getResourceAsStream("yourFont.TTF");
uniFont = Font.createFont(Font.TRUETYPE_FONT,is);
Font f = uniFont.deriveFont(24f);