1
1sanek1
У меня возникла проблема, немогу найти ошибку.
В моем коде апплет, создаёт объект класса SampleFrame, конструктор имеет 2 аргумента: массив с координатами и массив с коментарием. Алагаритм такой:
1)Сначало координаты и коментарии, записываю в хэш таблицу (HashMap pointSet = new HashMap(); )
2)Затем в каждый момент времени отслеживаем координаты курсора(используем интерфес MouseMotionListener и метод mouseMoved(MouseEvent me)) и сравниваем с координатами точек, запианных в хэш таблице, если координаты совпадают, то выводим коментарий данной точки.
3)В методе paint рисуется график по координатам точек.
Вот код программы:
код Java
Я так понимаю, что ошибка возникает в методе mouseMoved, но из-за чего не пойму.
Вот, повторяющиеся, возникающие ошибки(после запуска апплета):
C:\Program Files\Java\jdk1.6.0_05\bin>appletviewer grsf1.html
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at SampleFrame.paint(Proverka.java:63)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
at sun.awt.RepaintArea.paint(RepaintArea.java:224)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:301)
at java.awt.Component.dispatchEventImpl(Component.java:4489)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at SampleFrame.paint(Proverka.java:63)
at java.awt.Container.update(Container.java:1818)
at sun.awt.RepaintArea.updateComponent(RepaintArea.java:239)
at sun.awt.RepaintArea.paint(RepaintArea.java:216)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:301)
at java.awt.Component.dispatchEventImpl(Component.java:4489)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Причем, что интересно, у меня есть аналогичная программа(тот кусок где возникает ошибка), только работающая, вот и этот момент меня ставит в тупик , вот её код:
код Java
Если, кот нибуть знает в чём тут дело, помогите, заранее спасибо!
В моем коде апплет, создаёт объект класса SampleFrame, конструктор имеет 2 аргумента: массив с координатами и массив с коментарием. Алагаритм такой:
1)Сначало координаты и коментарии, записываю в хэш таблицу (HashMap pointSet = new HashMap(); )
2)Затем в каждый момент времени отслеживаем координаты курсора(используем интерфес MouseMotionListener и метод mouseMoved(MouseEvent me)) и сравниваем с координатами точек, запианных в хэш таблице, если координаты совпадают, то выводим коментарий данной точки.
3)В методе paint рисуется график по координатам точек.
Вот код программы:
код Java
Код:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.geom.*;
/*
<applet code="dfdg!" width=450 height=700>
</applet>
*/
class SampleFrame extends Frame implements MouseMotionListener
{
Object koment[];
Object koordinat[];
String msg="";
int mouseX, mouseY;
HashMap pointSet = new HashMap();
Point msgPoint;
Point2D p;
SampleFrame(String title, Object koment[], Object koordinat[])
{
super(title);
addMouseMotionListener(this);
MyWindowAdapter adapter = new MyWindowAdapter(this);
addWindowListener(adapter);
this.koment = koment;
this.koordinat = koordinat;
double x,y;
int t=0,n=1;
for(int i=0; i<koordinat.length; i+=2)
{
x = (Double)koordinat[i];
y = (Double)koordinat[i+1];
p = new Point2D.Double((int)x,(int)y);
pointSet.put(p, "Tochka: "+n+". "+koment[t]);
t++;n++;
}
}
public void paint(Graphics g)
{
g.drawLine(10, 50, 10, 900);
g.drawLine(10, 900, 1100, 900);
g.drawLine(10, 50, 5, 55);
g.drawLine(10, 50, 15, 55);
g.drawLine(1100, 900, 1095, 895);
g.drawLine(1100, 900, 1095, 905);
g.drawString("x",1100,900);
g.drawString("y", 10, 50);
g.drawString(msg, msgPoint.x, msgPoint.y); // здесь возникают последствии ошибки!!!
Color c1 = new Color(187, 193, 188);
Color c2 = new Color(0, 0, 0);
double a=0,b=0,c=0,d=0,a1=0,b1=0;
int x=0,y=0,t=1;
for(int i=0; i<=koordinat.length; i += 2)
{ if(i!=0)
{
if(t%2==0)
{
g.setColor(c1);
a1 = (Double)koordinat[x];
b1 = (Double)koordinat[i];
g.fillRect(10+(int)a1, 50, (int)b1-(int)a1, 900);
g.setColor(c2);
}
a = (Double)koordinat[x];
b = (Double)koordinat[y];
c = (Double)koordinat[i];
d = (Double)koordinat[i+1];
g.drawLine(10+(int)a, 900-(int)b, 10+(int)c, 900-(int)d);
t++;
}
x=i; y=i+1;
}
}
public void mouseDragged(MouseEvent me)
{
throw new UnsupportedOperationException("Not supported yet.");
}
public void mouseMoved(MouseEvent me) //Здесь возникает ошибка!!!!!!!!!!!
{
Point p = new Point(me.getX(), me.getY());
if(pointSet.containsKey(p))
{
msg = (String)pointSet.get(p);
msgPoint = p;
repaint();
}
else
{
msg="";
repaint();
}
}
}
class MyWindowAdapter extends WindowAdapter
{
SampleFrame sampleFrame;
public MyWindowAdapter(SampleFrame sampleFrame)
{
this.sampleFrame = sampleFrame;
}
public void windowClosing(WindowEvent we)
{
sampleFrame.setVisible(false);
}
}
public class Proverka extends Applet
{
SampleFrame objGr;
public void init()
{
Object koment[] = new Object[4];
Object koordinat[] = new Object[8];
koment[0]="Privet";
koment[1]="Privet";
koment[2]="Privet ti kto";
koment[3]="Hello";
koordinat[0]=0.;
koordinat[1]=0.;
koordinat[2]=10.;
koordinat[3]=40.;
koordinat[4]=20.;
koordinat[5]=20.;
koordinat[6]=30.;
koordinat[7]=80.;
objGr = new SampleFrame("Graphics", koment, koordinat);
objGr.setSize(1200, 950);
objGr.setVisible(true);
}
public void start()
{
objGr.setVisible(true);
}
public void stop()
{
objGr.setVisible(false);
}
}
Я так понимаю, что ошибка возникает в методе mouseMoved, но из-за чего не пойму.
Вот, повторяющиеся, возникающие ошибки(после запуска апплета):
C:\Program Files\Java\jdk1.6.0_05\bin>appletviewer grsf1.html
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at SampleFrame.paint(Proverka.java:63)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
at sun.awt.RepaintArea.paint(RepaintArea.java:224)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:301)
at java.awt.Component.dispatchEventImpl(Component.java:4489)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at SampleFrame.paint(Proverka.java:63)
at java.awt.Container.update(Container.java:1818)
at sun.awt.RepaintArea.updateComponent(RepaintArea.java:239)
at sun.awt.RepaintArea.paint(RepaintArea.java:216)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:301)
at java.awt.Component.dispatchEventImpl(Component.java:4489)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Причем, что интересно, у меня есть аналогичная программа(тот кусок где возникает ошибка), только работающая, вот и этот момент меня ставит в тупик , вот её код:
код Java
Код:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class Sample extends Frame implements MouseMotionListener {
String msg = "";
Point msgPoint;
Set<Point> pointSet = new HashSet<Point>();
public Sample() {
addMouseMotionListener(this);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
pointSet.add(new Point(10, 50));
pointSet.add(new Point(10, 90));
pointSet.add(new Point(110, 90));
}
@Override
public void paint(Graphics g) {
g.drawLine(10, 50, 10, 90);
g.drawLine(10, 90, 110, 90);
g.drawLine(10, 50, 5, 55);
g.drawLine(10, 50, 15, 55);
g.drawLine(110, 90, 100, 90);
g.drawLine(110, 90, 100, 90);
if (msgPoint != null) {
g.drawString(msg, msgPoint.x, msgPoint.y);
}
}
@Override
public void mouseMoved(MouseEvent me) {
Point p = new Point(me.getX(), me.getY());
if (pointSet.contains(p)) {
msg = "privet drug";
msgPoint = p;
repaint();
} else {
msg = "p: " + p.x + " " + p.y;
msgPoint = p;
repaint();
}
}
public static void main(String args[]) {
Sample f = new Sample();
f.setSize(new Dimension(300, 200));
f.setTitle("Okno");
f.setVisible(true);
}
@Override
public void mouseDragged(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
Если, кот нибуть знает в чём тут дело, помогите, заранее спасибо!