Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Доброго времени суток, вопрос такой как из командной строки передать в программу путь к файлу?
Т.е. как передать файл(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 в 12:22.
max29 вне форума   Ответить с цитированием
Старый 05.01.2018, 13:12   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 15,789
Репутация: 3110

icq: 512-765
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от max29 Посмотреть сообщение
выдаёт NullPointerException что означает переменной ничего не присвоено из за того что путь неверно указан.
Нет, это означает, что в какой-то переменной (ссылке) null и где-то была попытка использовать объект по этой ссылке. А чтобы узнать в какой и почему надо смотреть стектрейс или отладчик.
Alex11223 вне форума   Ответить с цитированием
Старый 05.01.2018, 13:19   #3
max29
Пользователь
 
Аватар для max29
 
Регистрация: 16.04.2016
Сообщений: 42
Репутация: 10
По умолчанию

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

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

icq: 512-765
skype: alexp.frl
По умолчанию

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

Я говорил только о том, что нельзя делать такие выводы на основе (не)представленных в первом сообщении данных.
Alex11223 вне форума   Ответить с цитированием
Старый 05.01.2018, 14:37   #6
max29
Пользователь
 
Аватар для max29
 
Регистрация: 16.04.2016
Сообщений: 42
Репутация: 10
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


21:19.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru