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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2018, 16:40   #1
Andruxai
 
Регистрация: 10.12.2013
Сообщений: 9
По умолчанию Вопрос на засыпку

Всем привет. Пишу программку которая сканирует экран в поисках определенного цвета пикселя. Все работало до того как я решил немного её модернизировать, сперва область для сканирования забивалась ручками в код программы, а теперь я сделал так что координаты сканования я получаю от того где я нажму мышкой на принскрине экрана. Теперь у меня программа ругается на эту строчку, и не пойму что не так, ведь все должно работать. Подскажите пожалуйста где я накосячил.
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:72 2)

Код:
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) {

}
}

Последний раз редактировалось Аватар; 24.11.2018 в 19:00.
Andruxai вне форума Ответить с цитированием
Старый 24.11.2018, 17:32   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

robot не создали и он равен нуллптр
p51x вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос на засыпку ds.Dante Общие вопросы .NET 35 25.02.2014 20:07
Вопрос на засыпку gih786 Свободное общение 3 19.02.2013 20:41
Вопрос на засыпку mnbvcxz13 Свободное общение 3 09.11.2011 18:36
Вопрос на засыпку BuT@JL Помощь студентам 6 08.03.2009 12:56