Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите что не так в программе 
:(
    Опции темы
andruxai
Дата 24.11.2018, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 24.12.2013

Репутация: нет
Всего: нет



Всем привет. Пишу программку которая сканирует экран в поисках определенного цвета пикселя. Все работало до того как я решил немного её модернизировать, сперва область для сканирования забивалась ручками в код программы, а теперь я сделал так что координаты сканования я получаю от того где я нажму мышкой на принскрине экрана. Теперь у меня программа ругается на эту строчку, и не пойму что не так, ведь все должно работать. Подскажите пожалуйста где я накосячил. 
https://ibb.co/g0X3nA
Exception in thread "Thread-2" java.lang.NullPointerException
    at Motorr.mrr(Motorr.java:11)
    at Scan$1$1.run(Scan.java:75)
    at java.lang.Thread.run(Thread.java:722)

Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Robot;
import javax.swing.JFrame;
import java.awt.AWTException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;


class TransparentComponentListener
        implements ComponentListener {

    public void componentResized(ComponentEvent e) {
        Component[] components = ((JFrame) e.getComponent())
                .getContentPane().getComponents();
        components[0].repaint();
    }

    public void componentMoved(ComponentEvent e) {
        componentResized(e);
    }

    public void componentShown(ComponentEvent e) {
        componentResized(e);
    }

    public void componentHidden(ComponentEvent e) {
        componentResized(e);
    }
}


public class Scan extends JFrame
{
    Robot robot;

    public static void main(String[] args)
    {



        final JFrame forma = new JFrame("Форма 1");
        forma.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        forma.setSize(new Dimension(30, 300));

        final JTextField x1 = new JTextField("",3);
        final JTextField y1 = new JTextField("",3);
        final JTextField x2 = new JTextField("",3);
        final JTextField y2 = new JTextField("",3);
        final JTextField x3 = new JTextField("",3);
        final JTextField y3 = new JTextField("",3);
        final JTextField x4 = new JTextField("",3);
        final JTextField y4 = new JTextField("",3);
        JButton batton1 = new JButton("Set");
        JButton batton2 = new JButton("Start");

        Scan s = new Scan();
        try {
            s.robot = new Robot();
        } catch (AWTException ex) {
        }
        batton2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                System.out.println("Start");
                new Thread(new Runnable() {

                    @Override
                    public void run() {
                        Motorr mot = new Motorr();
                        mot.mrr();
                    }
                }).start();
            }
        });
        batton1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                forma.setState(JFrame.ICONIFIED);


                Timer timer = new Timer(50, new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {

                        JButton b2 = new JButton("Exit");

                        final JFrame forma2 = new JFrame("Форма2");
                        forma2.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
                        forma2.setSize(new Dimension(150, 150));
                        forma2.addComponentListener(new TransparentComponentListener());
                        final Start app = new Start(forma2);
                        app.setLayout(new BorderLayout());
                        app.setVisible(true);
                        b2.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent e) {
                                forma.setState(JFrame.NORMAL);

                            }
                        });
                        b2.addActionListener(new ActionListener() {
                            @Override
                            public void actionPerformed(ActionEvent e) {
                                forma2.dispose();
                            }
                        });

                        app.add(b2,"North" );


                        forma2.getContentPane().add("Center", app);
                        forma2.pack();
                        forma2.setExtendedState(JFrame.MAXIMIZED_BOTH);
                        forma2.show();

                        app.addMouseListener(new MouseListener() {
                            @Override
                            public void mouseClicked(MouseEvent e) {

                                if(app.count<4){

                                    int x = e.getX();
                                    int y = e.getY();
                                    app.m[app.i][app.j]=x;
                                    app.m[app.i][app.j+1]=y;
                                    System.out.println("x = " + app.m[app.i][app.j]);
                                    System.out.println("y = " + app.m[app.i][app.j+1]);

                                    app.i++;
                                    app.count++;



                                }else{
                                    System.out.println("Печатаю ввесь массив:");
                                    for(int i=0;i<4;i++){
                                        for(int j=0;j<2;j++){
                                            System.out.print(app.m[i][j]+"  ");

                                        }
                                        System.out.println();
                                        x1.setText(Integer.toString(app.m[0][0]));
                                        y1.setText(Integer.toString(app.m[0][1]));
                                        x2.setText(Integer.toString(app.m[1][0]));
                                        y2.setText(Integer.toString(app.m[1][1]));
                                        x3.setText(Integer.toString(app.m[2][0]));
                                        y3.setText(Integer.toString(app.m[2][1]));
                                        x4.setText(Integer.toString(app.m[3][0]));
                                        y4.setText(Integer.toString(app.m[3][1]));
                                    }
                                }

                            }

                            @Override
                            public void mousePressed(MouseEvent e) {

                            }

                            @Override
                            public void mouseReleased(MouseEvent e) {

                            }

                            @Override
                            public void mouseEntered(MouseEvent e) {

                            }

                            @Override
                            public void mouseExited(MouseEvent e) {

                            }
                        });
                        forma2.addWindowListener(new WindowAdapter() {
                            @Override
                            public void windowClosed(WindowEvent e) {
                                super.windowClosed(e);
                                forma.setState(Frame.NORMAL);
                            }
                        });
                        forma2.setLocationRelativeTo(null);
                        forma2.setVisible(true);
                    }
                });
                timer.setRepeats(false);
                timer.start();
            }
        });


        JPanel panel = new JPanel();



        panel.add (x1);
        panel.add (y1);
        panel.add (x2);
        panel.add (y2);
        panel.add (x3);
        panel.add (y3);
        panel.add (x4);
        panel.add (y4);
        panel.add(batton1);
        panel.add(batton2);
        forma.getContentPane().add(panel);
        forma.setLocationRelativeTo(null);
        forma.setVisible(true);
    }
}


Код

import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.image.BufferedImage;


public class Motorr {

    public Scan m=new Scan();
    public void mrr(){
        Rectangle rec = new Rectangle(0, 0, 1023, 767);
        BufferedImage img=m.robot.createScreenCapture(rec);
        for(;;){
            for (int i=50; i <= 870; i++) {
                for (int j = 100; j <= 666; j++) {
                    Color c1 = new Color(img.getRGB(i, j));
                    Color col=new Color(111,0,0);
                    if(c1.equals(col)) {
                        Color c2 = new Color(img.getRGB(i+64, j));
                        if(c2.equals(col)) {
                            m.robot.mouseMove(i+25, j-30);
                            m.robot.mousePress(InputEvent.BUTTON1_MASK);
                            m.robot.mouseRelease(InputEvent.BUTTON1_MASK);
                            m.robot.delay(430);
                            m.robot.keyPress(17);
                            m.robot.delay(60);
                            m.robot.keyRelease(17);


                        }else{
                            Color c3 = new Color(img.getRGB(i+67, j));
                            if(c3.equals(col)) {
                                m.robot.mouseMove(i+25, j-30);
                                m.robot.mousePress(InputEvent.BUTTON1_MASK);
                                m.robot.mouseRelease(InputEvent.BUTTON1_MASK);
                                m.robot.delay(430);
                                m.robot.keyPress(17);
                                m.robot.delay(60);
                                m.robot.keyRelease(17);


                            }
                        }
                    }
                }
            }
            img=m.robot.createScreenCapture(rec);
        }
    }
}


import javax.swing.*;
import java.awt.*;


public class Start extends JComponent {
    int count =0;
    int i= 0;
    final int j =0;
    final int m[][]= new int [4][2];

    private JFrame frame;
    private Image background;

    public Start(JFrame frame) {
        this.frame = frame;
        updateBackground();
    }

    public void updateBackground() {
        try {
            Robot rbt = new Robot();
            Toolkit tk = Toolkit.getDefaultToolkit();
            Dimension dim = tk.getScreenSize();
            background = rbt.createScreenCapture(
                    new Rectangle(0, 0, (int) dim.getWidth(),
                            (int) dim.getHeight()));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void paintComponent(Graphics g) {
        Point pos = this.getLocationOnScreen();
        Point offset = new Point(-pos.x, -pos.y);
        g.drawImage(background, offset.x, offset.y, null);
    }



    public static void main(String[] args) {

    }
}
Код



PM MAIL   Вверх
LSD
Дата 26.11.2018, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



В классе Scan поле robot не инициализируется при создании, только в main().



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1360 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.