Java Swing: wyświetlanie obrazów z wnętrza słoika

Podczas uruchamiania aplikacji Java z eclipse mój ImageIcon pokazuje się dobrze.

Ale po stworzeniu słoika ścieżka do obrazu oczywiście się spieprza.

Czy istnieje sposób na wyodrębnienie obrazu ze słoika w czasie wykonywania, abym mógł go następnie otworzyć? Czy jest na to lepszy sposób?

Chciałbym rozpowszechnić pojedynczy plik jar, jeśli to możliwe.

Author: Barett, 2008-08-28

5 answers

Aby utworzyć ImageIcon z pliku obrazu w tych samych słoikach, kod zostanie załadowany:

new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))

Class.getResource zwraca adres URL zasobu(lub null!). ImageIcon ma konstruktor, który ładuje się z adresu URL.

Aby utworzyć adres URL dla zasobu w jar, który nie znajduje się na "classpath", zobacz dokumentację java.net.JarURLConnection.

 31
Author: Tom Hawtin - tackline,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-06 16:50:47

Możesz spróbować czegoś takiego:

InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");

W pliku JAR możesz mieć strukturę katalogów:

MyJAR.jar
- com (class files in here)
- images
---- obraz.jpg
 21
Author: Outlaw Programmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-27 20:18:29

To działa dla mnie, aby załadować i ustawić obraz tła panelu zawartości:

Jar (lub ścieżka budowania) zawiera:

 - com
 - img
 ---- bg.png

Java zawiera:

JFrame f = new JFrame("Testing load resource from jar");
try {
    BufferedImage bg = ImageIO.read(getClass().getResource("/img/bg.png"));
    f.setContentPane(new ImagePanel(bg));
} catch (IOException e) {
    e.printStackTrace();
}

Testowane i działające zarówno w jar, jak i w unjarred (jest to termin techniczny).

BTW getClass().getClassLoader().getResourceAsStream("/img/bg.png") - co próbowałem pierwszy-zwrócił mi null InputStream.

 9
Author: ekerner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-29 15:37:31

W netbeans 8.1 to, co zrobiłem, to umieszczenie folderu ikon i innych obrazów o nazwie Resources wewnątrz folderu src w pliku projektu. Więc kiedy buduję plik Jar , Folder jest tam dołączany.Drzewo plików powinno wyglądać tak:

  • src (pliki Javy w pakietach źródłowych są tutaj)
  • ** PAKIET, KTÓRY NAZWAŁEŚ W PROJEKCIE**

    • Plik.java
  • Zasoby

    • obraz.jpg

Kod powinien wyglądać następująco:

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
 1
Author: Abdelsalam Shahlol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-07 09:56:05

Wczytywanie obrazu z pliku Jar podczas wykonywania jest takie samo jak wczytywanie obrazu z IDE np. netbeans różnica polega na tym, że podczas wczytywania obrazu z pliku JAR ścieżka musi być poprawna i uwzględniać wielkość liter (bardzo ważne). To działa dla mnie

 image1 = new javax.swing.ImageIcon(getClass().getResource("/Pictures/firstgame/habitat1.jpg"));
        img = image1.getImage().getScaledInstance(lblhabitat1.getWidth(), lblhabitat1.getHeight(), Image.SCALE_SMOOTH);
        lblhabitat1.setIcon(new ImageIcon(img));

If P in " / Pictures / firstgame / habitat1.jpg " jest w dolnej części to nie działa. sprawdź spacje, przypadki i pisownię

 0
Author: Tobore Igbe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-07 16:10:43