Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2018, 11:04   #1
max29
Пользователь
 
Аватар для max29
 
Регистрация: 16.04.2016
Сообщений: 41
По умолчанию Как из командной строки передать в программу путь к файлу?

Доброго времени суток, вопрос такой как из командной строки передать в программу путь к файлу?
Т.е. как передать файл(jpg) в качестве аргумента командной строки (main функции(String[] args)) так как при попытке запустить программу (передавая ей путь к файлу) через командную строку (так как она для неё и написана) выдаёт NullPointerException что означает переменной ничего не присвоено из за того что путь неверно указан.
А вот собственно и сам способ которым я и пытаюсь передать путь к файлу:
Код:
e:\JavaWorkspace\MyImage\src> java myimage/MyImage E:\Chess-board.jpg
P.s. Или может посоветуйте литературу какую нибудь где это описывается.

Вот программа, это пример из книги Патрик Нимейер и Дэниэл Леук. Программирование на Java (стр. 1002)
Код:
public class MyImage extends JComponent implements MouseMotionListener {
 
    static int imageWidth = 60, imageHeight = 60;
    int grid = 10;
    int imageX, imageY;
    Image image;
 
    public MyImage(Image i) {
        image = i;
        addMouseMotionListener(this);
    }
 
    @Override
    public void mouseDragged(MouseEvent e) {
        imageX = e.getX();
        imageY = e.getY();
        repaint();
    }
 
    @Override
    public void mouseMoved(MouseEvent e) {
    }
 
    @Override
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        int w = getSize().width / grid;
        int h = getSize().height / grid;
        boolean black = false; 
        for (int y = 0; y <= grid; y++) {
            for (int x = 0; x <= grid; x++) {
                g2.setPaint(black ? Color.black : Color.white);
                black = !black;
                g2.fillRect(x * w, y * h, w, h);
            }
        }
        g2.drawImage(image, imageX, imageY, this);
    }
 
    public static void main(String[] args) {
 
        for (int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
        String imageFile = "e:\\Chess-board.jpg";
        //ImageIcon imageicon = new ImageIcon(imageFile);
        if (args.length > 0) {
            imageFile = args[0];
        }
 
        Image image = Toolkit.getDefaultToolkit().getImage(MyImage.class.getResource(imageFile));
        image = image.getScaledInstance(imageWidth, imageHeight, Image.SCALE_DEFAULT);
        //Image image = imageicon.getImage().getScaledInstance(imageWidth, imageHeight, Image.SCALE_DEFAULT);
 
        JFrame frame = new JFrame("MyImage");
        frame.setLocationRelativeTo(null);
        frame.add(new MyImage(image));
        frame.setSize(300, 300);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Последний раз редактировалось max29; 05.01.2018 в 11:22.
max29 вне форума Ответить с цитированием
Старый 05.01.2018, 12:12   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от max29 Посмотреть сообщение
выдаёт NullPointerException что означает переменной ничего не присвоено из за того что путь неверно указан.
Нет, это означает, что в какой-то переменной (ссылке) null и где-то была попытка использовать объект по этой ссылке. А чтобы узнать в какой и почему надо смотреть стектрейс или отладчик.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.01.2018, 12:19   #3
max29
Пользователь
 
Аватар для max29
 
Регистрация: 16.04.2016
Сообщений: 41
По умолчанию

Дело в том что я пытаюсь передать в программу путь к файлу так как в книге написано: Запустите приложение дополнительно указав файл изображения как аргумент командной строки.
Так вот как это можно осуществить?
max29 вне форума Ответить с цитированием
Старый 05.01.2018, 12:31   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Загрузка ресурса не работает с абсолютными путями.
Скопируйте файл в папку к классу (или в подпапку) и укажите относительный путь
Black Fregat вне форума Ответить с цитированием
Старый 05.01.2018, 12:42   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от max29 Посмотреть сообщение
Дело в том что я пытаюсь передать в программу путь к файлу так как в книге написано
И что? Книга запрещает думать?

Я говорил только о том, что нельзя делать такие выводы на основе (не)представленных в первом сообщении данных.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.01.2018, 13:37   #6
max29
Пользователь
 
Аватар для max29
 
Регистрация: 16.04.2016
Сообщений: 41
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
укажите относительный путь
А как это сделать?
max29 вне форума Ответить с цитированием
Старый 06.01.2018, 01:09   #7
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от max29 Посмотреть сообщение
А как это сделать?
Если в той же папке, то просто file.jpg
Если в подпапке, то folder\file.jpg
Главное, что от текущей папки, без имени диска и слэша в начале.
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать путь к файлу и его имя при выделении его двойным щелчком в проводнике Dem_v Общие вопросы Delphi 1 08.03.2011 23:21