Я создал отдельный класс потока, который должен рисовать некоторый текст в окне.
class MyThreads extends Thread {
Authorization reglog;
Graphics g;
Dimension dim;
public MyThreads(SimpleWind draw){
g = draw.getGraphics();
dim = draw.getSize();
}
public void run(){
for(int i = 0;;i++){
String result = null;
boolean resultOfAuthorization = reglog.getResultOfAuthorization();
if(resultOfAuthorization==true){
result = "Succesfully entered";
}
if(resultOfAuthorization== false){
result = "You are not entered yet.";
}
g.drawString(result, i, 50);
try {
this.sleep(100);
} catch (InterruptedException ex) {
}
}
}
}
И запускаю поток в другом классе
SimpleWind s = new SimpleWind(this);
thread = new MyThreads(s);
thread.start();
Но выбивает ошибку
Exception in thread "Thread-2" java.lang.NullPointerException
В классе SimpleWind я создаю Canvas, на котором рисую.
Код класса SimpleWind:
import java.applet.Applet;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Container;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Scanner;
/**
*
* @author fuji
*/
class SimpleWind extends Canvas {
SimpleWind th;
LABA_3 var;
Applet obj;
MyThreads win;
Calculations calcul;
int x0, y0;
Graphics gr = getGraphics();
public static int clickeddots[][] = new int[10][2];
public static int numberofclicks = 0;
public SimpleWind(LABA_3 obj)
{
repaint();
var = obj;
this.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent me)
{
x0=me.getX();
y0=me.getY();
clickeddots[numberofclicks][0] = x0;
clickeddots[numberofclicks][1]=y0;
Graphics gr = getGraphics();
numberofclicks++;
gr.setColor(Color.RED);
gr.drawOval(x0-10, y0-10, 2*10, 2*10);
findcoords(x0, y0);
}
});
}
public void choosepicture(int numberofpicture, SimpleWind s){
Graphics g = getGraphics();
Image myImg;
if(numberofpicture == 0){
myImg= Toolkit.getDefaultToolkit().getImage("picture1.jpg");
g.drawImage(myImg, 0, 0, getSize().width,getSize().height,this);
}
if(numberofpicture == 1){
myImg= Toolkit.getDefaultToolkit().getImage("Smilik.png");
g.drawImage(myImg, 0, 0, getSize().width,getSize().height,this);
}
}
public void drawCircleByCenter( int x, int y, int radius){
//g.setColor(Color.LIGHT_GRAY);
Graphics g = getGraphics();
g.fillOval(x-radius, y-radius, 2*radius, 2*radius);
}
public void findcoords(int x0, int y0)
{
int varx, vary;
int flag1 = 0, flag2 =0;
for(int i = 0; i<calcul.n; i++)
{
for (int j = -10; j < 10; j++)
{
varx=x0;
varx=varx-j;
if (varx == calcul.Array[i][0])
{
flag1 = 1;
}
}
for (int z = -10; z < 10; z++)
{
vary = y0;
vary = vary-z;
if (vary == calcul.Array[i][1])
{
flag2 = 1;
}
}
if(flag1 == 1 && flag2 == 1)// ???
{
System.out.println("The coords you've input are in the radius of " + calcul.Array[i][0]+" " +calcul.Array[i][1]);
}
flag1 = 0;
flag2 = 0;
}
}
public void paint(Graphics g) {
choosepicture(var.n, th);
drawCoord(g);
char a[] = {'.'};
int fontSize = 20;
g.setFont(new Font("TimesRoman", Font.PLAIN, fontSize));
g.setColor(Color.black);
}
public void drawCoord(Graphics g){
char a[] = {'.'};
for(int i = 0; i<calcul.n; i++)
{
g.drawChars(a, 0, a.length, calcul.Array[i][0], calcul.Array[i][1]);
drawCircleByCenter( calcul.Array[i][0], calcul.Array[i][1], 10);
}
}
}
Я так понимаю, исключение на этой строке boolean resultOfAuthorization = reglog.getResultOfAuthorization();
?
Вы переменную reglog
не инициализировали. У вас там null
.
UPD: насколько я помню, Canvas
из awt может на getGraphics()
возвращать null
, если элемент ещё не был отрендерен.
Читаем официальные доки, в частности этот урок. Рекомендуется рисовать в переопределённом методе paintComponent
.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
В библиотеке https://githubcom/kochedykov/jlibmodbus/blob/master/src/com/invertor/modbus/Modbus
Я написал отдельный класс потока, в котором двигаю строку по канвасуИ проблема в том, что если я делаю
Либа commons fileuploadЕсть код для загрузки файлов: