NullPointerException

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013
import processing.net.*;
Client client;

String IP = "192.168.1.10";
int port = 80;

color off = color(255, 255, 255);
color Ron = color(255, 0, 0);
color Gon = color(0, 255, 0);
color Bon = color(0, 0, 255);
color font1 = off;
color font2 = off;
color font3 = off;

int x = 1280;
int y = 720;
int button=3;

int R=0;
int G=0;
int B=0;


void setup() {
  size(x, y);
  Client client = new Client(this, IP, port);

}

void draw() {
  background(255);
  stroke(0);
  for (int i=1; i<button+1; i++) { 
    switch (i) {
     case 1:
       fill(font1);
       rect(x-x*0.1, y*0.045, x*0.07, y*0.035);
       client.write("R001N1");
     break;
     case 2:
       fill(font2);
       rect(x-x*0.1, y*0.045*2+10, x*0.07, y*0.035);
       client.write ("R001N2");
     break;
     case 3:
       fill(font3);
       rect(x-x*0.1, y*0.045*3+20, x*0.07, y*0.035);
       client.write ("R001N3");
     break;
    }
  }
}
 

void mousePressed()
{
  for (int i=1; i<button+1; i++) {
  if (mouseX >= (x-x*0.1) && mouseX <= (x-x*0.1+x*0.07) && mouseY >= (y*0.045*i+((i-1)*10)) && mouseY <= (y*0.045*i+((i-1))*10+y*0.035)) {
   switch (i) {
     case 1: 
       if (R == 0) {
         R = 1;
         font1 = Ron;
       }
       else  {
         R = 0;
         font1 = off;
       }
     break;
     case 2: 
       if (G == 0) {
         G = 1;
         font2 = Gon;
       }
       else  {
         G = 0;
         font2 = off;
       }
     break;
     case 3: 
       if (G == 0) {
         G = 3;
         font3 = Bon;
       }
       else  {
         G = 0;
         font3 = off;
       }
     break;
   }
  }
  }
  
  
}

Выдает ошибку NullPointerException в строках

client.write("R001N1");
client.write("R001N2");
client.write("R001N3");

В аналагичном примере ошибки здесь нет:


import processing.net.*;

Client client;
String data;
boolean flag1 = false;
boolean flag2 = false;

void setup() 
{
  size(200, 200);
  client = new Client(this, "192.168.137.50", 80); // Connect to server on port 80
}

void draw() 
{
  background(255);
  if (mouseOverRect() == true) 
  {  
    fill(204);                    
    if (flag1 == false)
    {
      client.write('H');         
      flag1 = true;
      flag2 = false;
    }
  } else {                    
    fill(0); 
    if (flag2 == false)
    {
      client.write('L');  
      flag1 = false;      
      flag2 = true;
    }
  }
  rect(50, 50, 100, 100);        
}

boolean mouseOverRect() 
{
  return ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 50) && (mouseY <= 150));
}

 

В чем может быть подвох? В цикле?

CityCat
CityCat аватар
Offline
Зарегистрирован: 13.06.2013

В том что исходя из этого описания: client.write(val), где val - a value to send as a single byte (один байт - то есть один символ)

Если же невтерпеж отослать массив символов (что вы и пытаетесь сделать), используйте client.write(buf, len), где buf: an array to send as a series of bytes (byte or char) (массив), len: the length of the buffer (длина массива).

P.S. А возможно и так: сlient.println("R001N1");

P.P.S. Эм... Сорри - не посмотрел, что речь о processing, а судя по этому описанию данное возможно в processing. Хотя, я бы все-таки попробовал print.

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

CityCat пишет:

В том что исходя из этого описания: client.write(val), где val - a value to send as a single byte (один байт - то есть один символ)

Если же невтерпеж отослать массив символов (что вы и пытаетесь сделать), используйте client.write(buf, len), где buf: an array to send as a series of bytes (byte or char) (массив), len: the length of the buffer (длина массива).

P.S. А возможно и так: сlient.println("R001N1");

P.P.S. Эм... Сорри - не посмотрел, что речь о processing, а судя по этому описанию данное возможно в processing. Хотя, я бы все-таки попробовал print.

в примере (который не мой скетч), если вместо 'H' поставить "R001N1', то ошибки так же нет.

 

ЗЫ пробую print

CityCat
CityCat аватар
Offline
Зарегистрирован: 13.06.2013

ingener.solovyev пишет:

CityCat пишет:

В том что исходя из этого описания: client.write(val), где val - a value to send as a single byte (один байт - то есть один символ)

Если же невтерпеж отослать массив символов (что вы и пытаетесь сделать), используйте client.write(buf, len), где buf: an array to send as a series of bytes (byte or char) (массив), len: the length of the buffer (длина массива).

P.S. А возможно и так: сlient.println("R001N1");

P.P.S. Эм... Сорри - не посмотрел, что речь о processing, а судя по этому описанию данное возможно в processing. Хотя, я бы все-таки попробовал print.

в примере (который не мой скетч), если вместо 'H' поставить "R001N1', то ошибки так же нет.

 

ЗЫ пробую print

Ну так и оставьте у себя не "R001N1", а 'R001N1' (надеюсь, разницу показывать не нужно ;) )

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

CityCat пишет:

ingener.solovyev пишет:

CityCat пишет:

В том что исходя из этого описания: client.write(val), где val - a value to send as a single byte (один байт - то есть один символ)

Если же невтерпеж отослать массив символов (что вы и пытаетесь сделать), используйте client.write(buf, len), где buf: an array to send as a series of bytes (byte or char) (массив), len: the length of the buffer (длина массива).

P.S. А возможно и так: сlient.println("R001N1");

P.P.S. Эм... Сорри - не посмотрел, что речь о processing, а судя по этому описанию данное возможно в processing. Хотя, я бы все-таки попробовал print.

в примере (который не мой скетч), если вместо 'H' поставить "R001N1', то ошибки так же нет.

 

ЗЫ пробую print

Ну так и оставьте у себя не "R001N1", а 'R001N1' (надеюсь, разницу показывать не нужно ;) )

print не прошел,

про ' ' и " " я опечатался, имел ввиду " " работало в примере, в моем не работает, ошибка та же.

 

И вообще, я думаю, NullPointerException не связан с типом данных. скорее всего что то с client соединением, которое оказалось в цикле. Попробую вывести из цикла...

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

Ошибка найдена. Как обычно "сам дурак".

В строке 02 и 26 продублировал Client client;