JavaRush/Java блог/Архив info.javarush/Java ImageIcon и кривые руки
DenisJNewb
11 уровень

Java ImageIcon и кривые руки

Статья из группы Архив info.javarush
участников
Java ImageIcon и кривые руки - 1
import javax.swing.*;
import java.awt.*;

public class TEST {
    public static void main(String[] args) {
        new Window();
    }

    static class Window extends JFrame {
        Window() {
            setSize(300, 250);
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setLayout(new FlowLayout());

            ImageIcon icon = new ImageIcon("icon.jpg");

            setIconImage(icon.getImage());
            getContentPane().add(new JLabel(icon));

            setLocationRelativeTo(null);
            setVisible(true);
        }
    }
}
Есть такой код, почему не показывается изображение в окне и почему не ставится иконка окна. icon.jpg имеет размер 32х32 пикселя и лежит в src с остальными файлами (пользуюсь intellij idea). Результат выполнения кода — пустое окно со стандартной иконкой.
Комментарии (8)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
DenisJNewb
Уровень 11
16 ноября 2015, 08:35
Ещё на эту же тему, думаю.
Есть код
String path = SMNote.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
            File file = new File(path+"db.txt");


Который выкидывает такую ошибку:

«C:\Program Files\Java\jdk1.8.0_45\bin\java» -Dfile.encoding=windows-1251 -jar C:\Users\User\IdeaProjects\NotePadNVES++\out\artifacts\SMNote\SMNote.jar
Ошибка в load: java.io.FileNotFoundException: C:\Users\User\IdeaProjects\NotePadNVES++\out\artifacts\SMNote\SMNote.jar\db.txt (Системе не удается найти указанный путь)

В IDE всё нормально работает, но .jar не хочет видеть этот файл. Проверил, файл в .jar лежит
Погуглил, решить не смог. Прошу помощи
laz_a_rus
Уровень 39
16 ноября 2015, 11:45
Как по мне, так все логично, что такое на работает:
1. Идея, скорее всего, запускает это еще до упаковки в архив, потому не испытывает никаких сложностей. Ради интереса можно вывести в консоль
String path = SMNote.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
File file = new File(path+"db.txt");
System.out.println(file).getAbsolutePath();

2. Судя по названию файла, это должно быть «базой данных». Как по мне не лучшая идея, класть базу данных в архив. Почему? Потому что:
3. Нельзя просто так взять и читать/писать файлы из/в архив. Архив это же не просто папка с файлами, что бы оттуда что-то прочитать — нужно это разархивировать, что бы что-то добавить/обновить, нужно заново весь архив перепаковать(на 31 уровне есть большая задача по архивам).
Думаю стоит прочитать что-то вроде этого, а дальше уже развивать мысль.
По приведенной ссылке, кроме самого ответа, в самом низу есть пример, как читать файл из своего архива в виде ресурса, но изменять его и писать обратно, думаю, все же не стоит.
DenisJNewb
Уровень 11
16 ноября 2015, 13:55
Воспользуюсь советом, помещу базу в user.home/documents лучше. Спасибо
laz_a_rus
Уровень 39
12 ноября 2015, 15:01
Выведите в консоль
System.out.println(System.getProperty("user.dir"));
и посмотрите куда указывает путь.
Писать нужно
ImageIcon icon = new ImageIcon("src/icon.jpg");
и все нормально будет.
DenisJNewb
Уровень 11
13 ноября 2015, 07:21
<code>System.out.println(System.getProperty("user.dir"));</code>
Показывает C:\Users\User\IdeaProjects\NotePadNVES++
<code>ImageIcon icon = new ImageIcon("C:\\Users\\User\\IdeaProjects\\NotePadNVES++\\icon.jpg");</code>
<code>ImageIcon icon = new ImageIcon("src/icon.jpg");</code>
Так тоже не работает. Просто пустое окно, со стандартным значком джава

UPD:
сделал в пэйнте пустой зеленый квадрат — 800х800, сохранил как .jpg и всё заработало.
А ту картинку не пропускает почему-то. Спасибо за помощь, буду рисовать с нуля.
AndreGold
Уровень 28
13 ноября 2015, 07:31
у вас где файл лежит? В папке src? Если да, то путь будет
src/image.jpg

и дабы Вашу картинку не растянуло, используйте
setPreferredSize
DenisJNewb
Уровень 11
13 ноября 2015, 07:44
Спасибо за помощь, проблема была в картинке. С новыми все работает. «src/*.jpg» — если в src. И "*.jpg" — если в папке проекта картинка.
AndreGold
Уровень 28
12 ноября 2015, 14:45
порнобуйте через
super.getContentPane();

и посмотрите корректный ли путь к картинке
"icon.jpg"