Skip to content

No awt in java.library.path #7849

@PavelBortnovskyi

Description

@PavelBortnovskyi

Hi. I am have such JAVA code in my pet project that I am running in GraalVM Native Image:

`import ij.ImagePlus;
import ij.process.ColorProcessor;
import ij.process.ImageProcessor;
import org.springframework.stereotype.Component;
import org.telegram.telegrambots.meta.api.objects.InputFile;

import javax.imageio.ImageIO;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

@component
public class ImageFactory {

public InputFile createImageWithText(String text, int fontSize, int backgroundNumber) throws IOException {

    String backgroundResource = String.format("/Images/background%d.jpg", backgroundNumber + 1);

    try (InputStream resourceStream = getClass().getResourceAsStream(backgroundResource);
         ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {

        BufferedImage bufferedImage = ImageIO.read(resourceStream);
        ImagePlus image = new ImagePlus("Background", new ColorProcessor(bufferedImage));
        ImageProcessor ip = image.getProcessor();

        Font font = new Font(Font.MONOSPACED, Font.BOLD, fontSize);
        ip.setFont(font);
        ip.setColor(Color.WHITE);
        FontMetrics fontMetrics = ip.getFontMetrics();
        int charWidth = fontMetrics.charWidth('A');

        String[] lines = text.split("\n");
        int x = 20;
        int y = ip.getFontMetrics().getHeight();
        for (String line : lines) {
            if (line.contains("(")) {
                String[] subLines = line.split("\\(");
                ip.drawString(subLines[0], x, y += ip.getFontMetrics().getHeight());
                if (subLines[1].contains("-")) ip.setColor(Color.RED);
                else {
                    ip.setColor(Color.GREEN);
                }
                ip.drawString("(" + subLines[1], x + charWidth * subLines[0].length(), y);
                ip.setColor(Color.WHITE);
            } else ip.drawString(line, 30, y += ip.getFontMetrics().getHeight() + 20);
        }
        ImageIO.write(ip.getBufferedImage(), "jpg", outputStream);
        return new InputFile(new ByteArrayInputStream(outputStream.toByteArray()), "prices.jpg");
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

}`

and it produces the error:

Exception in thread "crypto_currencies_pet_bot Telegram Executor" java.lang.UnsatisfiedLinkError: No awt in java.library.path
2023-11-18 21:51:59 at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.NativeLibrarySupport.loadLibraryRelative(NativeLibrarySupport.java:136)
2023-11-18 21:51:59 at java.base@21.0.1/java.lang.ClassLoader.loadLibrary(ClassLoader.java:106)
2023-11-18 21:51:59 at java.base@21.0.1/java.lang.Runtime.loadLibrary0(Runtime.java:916)
2023-11-18 21:51:59 at java.base@21.0.1/java.lang.System.loadLibrary(System.java:2059)
2023-11-18 21:51:59 at java.desktop@21.0.1/java.awt.Toolkit$2.run(Toolkit.java:1384)
2023-11-18 21:51:59 at java.desktop@21.0.1/java.awt.Toolkit$2.run(Toolkit.java:1382)
2023-11-18 21:51:59 at java.base@21.0.1/java.security.AccessController.executePrivileged(AccessController.java:129)
2023-11-18 21:51:59 at java.base@21.0.1/java.security.AccessController.doPrivileged(AccessController.java:319)
2023-11-18 21:51:59 at java.desktop@21.0.1/java.awt.Toolkit.loadLibraries(Toolkit.java:1381)
2023-11-18 21:51:59 at java.desktop@21.0.1/java.awt.Toolkit.initStatic(Toolkit.java:1419)
2023-11-18 21:51:59 at java.desktop@21.0.1/java.awt.Toolkit.(Toolkit.java:1393)
2023-11-18 21:51:59 at java.base@21.0.1/java.lang.Class.ensureInitialized(DynamicHub.java:595)
2023-11-18 21:51:59 at java.desktop@21.0.1/sun.awt.AppContext$2.run(AppContext.java:273)
2023-11-18 21:51:59 at java.desktop@21.0.1/sun.awt.AppContext$2.run(AppContext.java:262)
2023-11-18 21:51:59 at java.base@21.0.1/java.security.AccessController.executePrivileged(AccessController.java:129)
2023-11-18 21:51:59 at java.base@21.0.1/java.security.AccessController.doPrivileged(AccessController.java:319)
2023-11-18 21:51:59 at java.desktop@21.0.1/sun.awt.AppContext.initMainAppContext(AppContext.java:262)
2023-11-18 21:51:59 at java.desktop@21.0.1/sun.awt.AppContext$3.run(AppContext.java:315)
2023-11-18 21:51:59 at java.desktop@21.0.1/sun.awt.AppContext$3.run(AppContext.java:298)
2023-11-18 21:51:59 at java.base@21.0.1/java.security.AccessController.executePrivileged(AccessController.java:129)
2023-11-18 21:51:59 at java.base@21.0.1/java.security.AccessController.doPrivileged(AccessController.java:319)
2023-11-18 21:51:59 at java.desktop@21.0.1/sun.awt.AppContext.getAppContext(AppContext.java:297)
2023-11-18 21:51:59 at java.desktop@21.0.1/javax.imageio.spi.IIORegistry.getDefaultInstance(IIORegistry.java:123)
2023-11-18 21:51:59 at java.desktop@21.0.1/javax.imageio.ImageIO.(ImageIO.java:64)
2023-11-18 21:51:59 at com.neo.crypto_bot.service.ImageFactory.createImageWithText(ImageFactory.java:29)
2023-11-18 21:51:59 at com.neo.crypto_bot.command.FavoriteCommandHandler.execute(FavoriteCommandHandler.java:72)
2023-11-18 21:51:59 at org.telegram.telegrambots.extensions.bots.commandbot.commands.BotCommand.processMessage(BotCommand.java:78)
2023-11-18 21:51:59 at org.telegram.telegrambots.extensions.bots.commandbot.commands.CommandRegistry.executeCommand(CommandRegistry.java:109)
2023-11-18 21:51:59 at org.telegram.telegrambots.extensions.bots.commandbot.TelegramLongPollingCommandBot.onUpdateReceived(TelegramLongPollingCommandBot.java:104)
2023-11-18 21:51:59 at java.base@21.0.1/java.util.ArrayList.forEach(ArrayList.java:1596)
2023-11-18 21:51:59 at org.telegram.telegrambots.meta.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27)
2023-11-18 21:51:59 at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:312)
2023-11-18 21:51:59 at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:832)
2023-11-18 21:51:59 at org.graalvm.nativeimage.builder/com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:211)

I am using container-registry.oracle.com/graalvm/native-image:21.0.1-ol8, but tried lot of options with same result
Can be reproduced in this way:

  1. docker pull pavelbortnovskyi/crypto-bot-awt-error:latest
  2. run /get_all_favorite_pairs in https://t.me/crypto_currencies_pet_bot

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions