我正在尝试在一个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");
它不起作用。我该怎么办?
答案 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);