Array returning NullPointerException [duplicate] - java

This question already has answers here:
What is a NullPointerException, and how do I fix it?
(12 answers)
Closed 6 years ago.
I've been creating a Snakes program that contains an array of Segments. In this case, I believe that it is vital I use an array as the order matters. The first problem is that even after I create a "new Segment instance", it doesn't display any square (which is the first segment of the snake). But then, when I put a System.out.println() statement inside of the paint method (shown later), it throws a NullPointerException. Here is the code:
NOTE: the method increaseSegmentCount() was called once from an outside class. Also, this isn't the full code...
Snake
import java.awt.Graphics;
import java.awt.Point;
public class Snake implements Entity {
Point location;
Segment[] segments;
int segmentCount = 0;
public Snake(Point location) {
this.location = location;
segments = new Segment[25];
}
public void increaseSegmentCount() {
segments[segmentCount] = new Segment(new Point(location.x + (Segment.getSize().width * segments.length),
location.y + (Segment.getSize().height * segments.length)));
segmentCount++;
}
public Segment[] getSegments() {
return segments;
}
public int getSegmentCount() {
return segmentCount;
}
#Override
public void paint(Graphics g) {
for (Segment segment : segments) {
if (segment != null)
segment.paint(g);
}
}
}
paint() method after putting System.out.println statement in:
#Override
public void paint(Graphics g) {
for (Segment segment : segments) {
if (segment != null)
System.out.println("Called")
segment.paint(g);
}
}
Segment class (pretty straightforward class)
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
public class Segment {
Point location;
public Segment(Point location) {
this.location = location;
}
public static Dimension getSize() {
return new Dimension(20, 20);
}
public void paint(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(location.x, location.y, 20, 20);
}
}
paintComponent() method in View class (for debugging purposes)
#Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (Entity entity : model.getEntities()) {
entity.paint(g);
}
}
And finally the error (after inserting the print statement... there is none before I inserted it):
Called
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Snake.paint(Snake.java:61)
at View.paintComponent(View.java:50)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager$4.run(Unknown Source)
at javax.swing.RepaintManager$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$1200(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Any ideas? Also, please don't mark this as a duplicate and point me to another post that shows how to solve NPE's... I already know what to do and what's going on (for the most part), but this is a curious, thing I've come across and it's very confusing. Thanks.

you need { } for your if when you add the print statement...
if (segment != null) {
System.out.println("Called")
segment.paint(g);
}
You might consider using an automatic code formatter, which would make this obvious with the indentation.

Related

Exception in thread

I am new to Java programming. I am facing this error, and not understanding how to resolve this. Any help would be appreciated.
public class ThermostatView extends JFrame
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
ThermostatView frame = new ThermostatView();
frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
/**
* Constructs a ThermostatView
*/
public ThermostatView()
{
thermostatObj = new Thermostat();
initComponents();
}
}
And this is my other class:
public class Thermostat extends ThermostatView
{
private static final long serialVersionUID = 1L;
public void setActualTempFunc(String actualTemp)
{
if(actualTemp.length() != 0)//actualTemp != null && !actualTemp.isEmpty())
lblActualTemp.setText(actualTemp);
else
lblActualTemp.setText("-");
}
}
the error is:
Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem:
JFrame cannot be resolved to a type
at Thermostat.<init>(Thermostat.java:3)
at ThermostatView.<init>(ThermostatView.java:145)
at ThermostatView$1.run(ThermostatView.java:128)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Looks like its getting caught in recursion.
Any help ???
I can see a few errors with your code.
You need to ensure you have all the required packages imported (e.g. java.awt.* etc).
Where are you delcaring lblActualTemp and thermostatObj ? You need to explicity delcare their type.
Using an IDE (development software) such as Eclipse, IntelliJ or Netbeans etc. usually spot these errors before you compile.

java exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException

I was trying my first code in java swing and got many errors. my code is:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Swinging extends JFrame
{
JTextField ans;
int count =0;
static final long serialVersionUID = 1L;
Swinging()
{
Container cp= getContentPane();
cp.setLayout(new FlowLayout());
cp.add(new JLabel("value",7));
ans=new JTextField("0",10);
cp.add(ans);
JButton inc= new JButton("increment");
cp.add(inc);
inc.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
++count;
ans.setText(count+"");
}
});
setSize(200,200);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
public class Usingswing {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Swinging(); // Let the constructor do the job
}
});
}
}
and the errors are as follows:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: horizontalAlignment
at javax.swing.JLabel.checkHorizontalKey(Unknown Source)
at javax.swing.JLabel.setHorizontalAlignment(Unknown Source)
at javax.swing.JLabel.<init>(Unknown Source)
at javax.swing.JLabel.<init>(Unknown Source)
at hopeso.Swinging.<init>(Usingswing.java:16)
at hopeso.Usingswing$1.run(Usingswing.java:45)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
i tried solving my problem using the questions posted by other people but it didn't workout. please help.
The error occurs because of the following line:
cp.add(new JLabel("value",7));
You're using JLabel's constructor that receives the text and the horizontal alignment. The alignment is an int, but it has to be one of the following constants, otherwise it will throw the IllegalArgumentException:
LEFT (2)
CENTER (0)
RIGHT (4)
LEADING (10)
TRAILING (11)
These constants are defined in SwingConstants, so you can just write something like this:
cp.add(new JLabel("value", SwingConstants.CENTER));

Java throws Java NullPointerException when making Token

Running my program throws A Null Pointer Exception every time I create a new token of a specific type.
Here's the error:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Pattern.draw(Pattern.java:98)
at GameToken.draw(GameToken.java:68)
at GameTokenPanel.paintComponent(GameTokenPanel.java:83)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
at java.awt.Container.paint(Unknown Source)
at java.awt.Window.paint(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$1100(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Here are the parts in the class which are affected by utoken0.draw(g2) and utoken1.draw(g2);
Here's my pattern class
public class Pattern
{
public static final int pattern0=0;
public static final int pattern1=1;
public static final int pattern2=2;
//private CrossPattern pattern1;
//private LineMid pattern3;
//private CircPattern pattern2;
private Rectangle bbox;
private int type;
private Random random = new Random();
private CrossPattern cross;
private CircPattern circ;
private LineMid linemid;
public Pattern(int type, Rectangle bbox)
{
this.bbox=bbox;
type=type;
if (type == 0)
{
cross= new CrossPattern(bbox);
}
if( type == 1)
{
circ=new CircPattern(bbox);
}
if(type ==2)
{
linemid=new LineMid(bbox);
}
}
public int getType()
{
return type;
}
public void draw(Graphics2D g2)
{
if(type==pattern0)
cross.draw(g2);
else if(type==pattern1)
circ.draw(g2);
else if (type==pattern2)
linemid.draw(g2);
}
}
Here is my GameToken Class:
public class GameToken implements VisibleShape
{
private boolean visible;
public Rectangle bbox;
private Pattern pattern;
private Color color;
Random random = new Random();
public GameToken(int patternType, int x, int y, int width, int height)
{
bbox = new Rectangle( x,y,width,height);
if(patternType==0)
{
pattern = new Pattern(patternType,bbox);
}
else if(patternType==1)
{
pattern= new Pattern(patternType,bbox);
}
else if(patternType==2)
{
pattern = new Pattern(patternType,bbox);
}
}
public void draw(Graphics2D g2)
{
g2.draw(bbox);
pattern.draw(g2);
}
}
Here is my panel:
public class GameTokenPanel extends JPanel {
private GameToken token1;
private final int TOKEN_WIDTH=35;
private Random random = new Random();
private ArrayList <GameToken> tokenarr;
private GameToken utoken0 = new GameToken(0, 0,0,TOKEN_WIDTH,TOKEN_WIDTH);
private GameToken utoken1 = new GameToken(1, 0,0,TOKEN_WIDTH,TOKEN_WIDTH);
private GameToken utoken2 = new GameToken(2, 0,0,TOKEN_WIDTH,TOKEN_WIDTH);
private GameToken currentToken= utoken0;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2= (Graphics2D) g;
g2.setColor(Color.BLUE);
utoken0.draw(g2);
utoken1.draw(g2);
//utoken2.draw(g2);
g2.setColor(Color.RED);
//token1.draw(g2);
for (int i =0; i<=10;i++)
{
tokenarr.get(i).draw(g2);
}
}
}
So basically, I use the panel to create the Game tokens which would create the Pattern and the rectangle. The Pattern class would then call the specific pattern class and draw it using the rectangle dimensions. Which would then appear on a frame.
The issue is that I would create utoken0 in the panel and draw it in the draw method. But when I would draw utoken1 the same way. It would lead to errors. I initiated them the same way and drew the same way . But I am getting error. Also , if I attempt to draw utoken2, it would also give me an error.
Also,when I generate the random tokens at the beginning of panel, It creates the 3 types. But when I would run the utoken and pick a specific type. Only the 0 pattern works, however 1 and 2 does not.
I don't have testing environment, simply dry run on your code.
Your code failure to set correct value into class variable type in Pattern. Hence, the type variable will have default value 0.
In draw method of Pattern class, it will call cross.draw(g2); since the type is 0. However, the code never initiate cross for pattern 1 or 2. It results in NullPointerException.
You should fix line in Pattern class from:
type=type;
to
this.type=type;

Batik IllegalStateException when resizing the JComponent containing the JSVGCanvas

My program seems to work quite well, but I keep getting "IllegalStateExceptions: RunnableQueue not started or has exited" from time to time, when I try to resize my component. I have set the documentState to ALWAYS_DYNAMIC and I have read that you are supposed to use the JSVGCanvas' UpdateManager and call invokelater(). I understand that it is available after the first time that
gvtBuildCompleted(GVTTreeBuilderEvent e)
is called, so I check whether it is running before I use it but I still get the exception.
The following method is called by a thread repeatedly and seems to cause the exception:
private void updateDomTree(final SVGComponent component, final Document doc)
{
if(component.getSvgCanvas().getUpdateManager() != null && component.getSvgCanvas().getUpdateManager().isRunning())
{
component.getSvgCanvas().getUpdateManager().getUpdateRunnableQueue().invokeLater(new Runnable()
{
public void run()
{
final Node newNode = doc.getChildNodes().item(0).getFirstChild();
//could be easier to get this value, but ... it works.
String newNodeId = newNode.getAttributes().getNamedItem("id").getFirstChild().getNodeValue();
NodeList nodes = component.getSvgDocument().getDocumentElement().getChildNodes();
Node updateNode = findElementById(nodes, newNodeId);
resizeComponent(component, doc);
component.getSvgCanvas().getSVGDocument().adoptNode(newNode);
component.getSvgCanvas().getSVGDocument().getDocumentElement().replaceChild(newNode, updateNode);
component.refreshSVGCanvas();
}
});
}
}
The actual resizing is done here:
protected void resizeComponent(SVGComponent component, Document doc)
{
Element svgRoot = doc.getDocumentElement();
final int svgWidth = Integer.parseInt(svgRoot.getAttribute("width"));
final int svgHeight = Integer.parseInt(svgRoot.getAttribute("height"));
String[] viewBox = svgRoot.getAttribute("viewBox").split(" ");
int viewBoxLeft = Integer.parseInt(viewBox[0]);
int viewBoxTop = Integer.parseInt(viewBox[1]);
final float factor = component.getScaleFactor();
String[] viewBoxOld = component.getSvgDocument().getDocumentElement().getAttribute("viewBox").split(" ");
int viewBoxLeftOld = Integer.parseInt(viewBoxOld[0]);
int viewBoxTopOld = Integer.parseInt(viewBoxOld[1]);
int xDiff = (int) ((viewBoxLeftOld - viewBoxLeft)*factor);
int yDiff = (int) ((viewBoxTopOld - viewBoxTop)*factor);
if ( viewBoxLeftOld != viewBoxLeft ) //If there is additional content left
{
component.setLocation(component.getLocation().x - xDiff, component.getLocation().y);
}
if ( viewBoxTopOld != viewBoxTop ) //If there is additional content right)
{
component.setLocation(component.getLocation().x, component.getLocation().y - yDiff);
}
component.getSvgDocument().getDocumentElement().setAttribute("width",""+svgWidth);
component.getSvgDocument().getDocumentElement().setAttribute("height",""+svgHeight);
component.getSvgDocument().getDocumentElement().setAttribute("viewBox", ""+viewBoxLeft+" "+viewBoxTop+" "+svgWidth+" "+svgHeight);
component.setSize((int)(svgWidth*factor),(int)(svgHeight*factor));
}
The method
refreshJSVGCanvas()
calls
JSVGCanvas.setDocument(Document);
JSVGCanvas.setSize(int, int);
Here's the full stack trace:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: RunnableQueue not started or has exited
at org.apache.batik.util.RunnableQueue.invokeLater(RunnableQueue.java:277)
at org.apache.batik.swing.svg.AbstractJSVGComponent.updateRenderingTransform(AbstractJSVGComponent.java:1057)
at org.apache.batik.swing.gvt.AbstractJGVTComponent$1.componentResized(AbstractJGVTComponent.java:237)
at java.awt.AWTEventMulticaster.componentResized(Unknown Source)
at java.awt.Component.processComponentEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Thanks in advance, I have searched everywhere and tried a lot, but could not find a solution.
Edit:
This is the invokeLater-Method of Batik where the Exception is actually thrown:
public void invokeLater(Runnable r) {
if (runnableQueueThread == null) {
throw new IllegalStateException
("RunnableQueue not started or has exited");
}
synchronized (list) {
list.push(new Link(r));
list.notify();
}
}
runnableQueueThrad is set inside that class' run()-Method and set to null at the end.
So I guess I have to do some kind of synchronization.
Hazard a guess, the "public void run()" code should not be inside another method and really is a thread class/interface objects so called constructor(interface version actually).
Remove it to its own class(e.g. nested subclass to preserve scope) and implement the "thread runnable" interface on the class to place the "run()" method in it to use.
Stack trace says the run method is not available because it does not actually have such a method(or at least not properly declared) so it is in an "illegal state".

Exception in thread "AWT-EventQueue-0"

I am currently doing a project on steganography using discrete Wavelet Transform.I have already written the code and compiled it.However I am facing some exceptions.Kindly help me interpret the exceptions.
The exception is as follows
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at DWT.dwtFunc(Steganography.java:292)
at TextInput.actionPerformed(Steganography.java:252)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
I am new in Stack Overflow.Forgive me if I have made any mistake while posting the question.
Thank You
Re:
Sorry Sir I am still getting acquainted to the rules of the forum.
The code for detection of skin region in an image is
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import java.io.*;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.imageio.ImageIO;
import java.awt.*;
import java.lang.*;
public class demo2
{
public void skindet()
{
float[] hsvval;
float hue,sat,val;
int counter = 0;
String[] skinpixel = new String[200000];
int scount = 0;
try
{
BufferedImage image = ImageIO.read(new File("lena.png"));
int[][] rgb=new int[550][550];
int w = image.getWidth();
int h = image.getHeight();
hsvval=new float[3];
int red,green,blue;
for (int i=0;i<w;i++)
{
for (int j=0;j<h;j++)
{
rgb[i][j] =image.getRGB(i,j);
red=(rgb[i][j] >> 16) & 0xff;
green=(rgb[i][j] >> 8) & 0xff;
blue=(rgb[i][j]) & 0xff;
float[] values = Color.RGBtoHSB(red,green,blue,null);
for(int s=0;s<3;s++)
{
hsvval[counter]=values[s];
counter++;
}
hue=hsvval[0];
sat=hsvval[1];
val=hsvval[2];
if(hue>0 && hue<0.11 && sat>0.2 && sat<0.7)
{
String xcor=Integer.toString(i);
String ycor=Integer.toString(j);
skinpixel[scount]=xcor;
scount++;
skinpixel[scount]=ycor;
scount++;
}
}
}
int length=skinpixel.length;
for(int i=0;i<length;i++)
System.out.println(skinpixel[i]+"\n");
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[])
{
demo2 dem=new demo2();
dem.skindet();
}
}
The exception is
java.lang.ArrayIndexOutOfBoundsException: 3
at demo2.skindet(demo2.java:44)
at demo2.main(demo2.java:79)
Thank You for replying.Regards
It means that you're calling Integer.parseInt from line 292 of Steganography.java (which unusually appears to hold a class called DWT rather than Steganography), but you're providing a null value.
It looks like this is in response to some action being performed on a text field.
We can't really tell a lot more without seeing your code - you need to work out why the value is null.
EDIT: Okay, now that it's changed to a completely different error, this is the problem:
int counter = 0;
hsvval=new float[3];
...
for (int i=0;i<w;i++)
{
for (int j=0;j<h;j++)
{
...
for(int s=0;s<3;s++)
{
hsvval[counter]=values[s];
counter++;
}
...
}
}
So the first time the inner loop is executed, it's fine - but on the second iteration of the middle loop (j = 1), you haven't reset counter, so it's 3 - which is out of range. You've got the same problem with scount later.
If you declare and initialize count and scount just before they're used in the inner loop, it's fine.

Categories