绘制从 ArrayList 读取的矩形时出错?
errors when drawing a rectangle that is read from an ArrayList?
我是这个网站的新手,所以如果我违反了任何规则,请原谅我。我已经找了几天了,还没有找到答案,如果以前有人回答过,请告诉我。
我正在创建一个 java 程序,它可以根据文件中的数据绘制图像(在本例中为矩形)。我遇到了无法修复或找不到解决方案的错误。
这是主要的 class 文件,我 运行 里面的所有内容。
package pkg9_weeks_project;
import java.io.FileNotFoundException;
import javax.swing.JFrame;
public class Map {
public static void main(String[] args) throws FileNotFoundException {
JFrame window = new JFrame();
window.setSize(640, 640);
window.setTitle("this is a frame of J's, otherwise known as a JFrame");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
drawningcomponent DC = new drawningcomponent();
window.add(DC);
drawningcomponent.readinmapdata(); //this is to make sure it is reading the file in
}
}
这是读入并将数据文件的数据添加到 ArrayList 的文件
并且...好吧..尝试使用 ArrayList
中的数据绘制矩形
package pkg9_weeks_project;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
public class drawningcomponent extends JComponent
{
public static ArrayList<String> maptiles2 ;
public static void readinmapdata() throws FileNotFoundException
{
maptiles2 = new ArrayList<String>();
Scanner inputFile = new Scanner(new File("./src/MapData"));
while(inputFile.hasNextLine())
{
String line = inputFile.nextLine();
String data[] = line.split("");
String tile1 = data[0].trim();
String tile2 = data[1].trim();
String tile3 = data[2].trim();
String tile4 = data[3].trim();
maptiles2.add(tile1);
maptiles2.add(tile2);
maptiles2.add(tile3);
maptiles2.add(tile4);
(This was a test to make sure the items were added
and could be printed from the ArrayList)
System.out.println(maptiles2.get(0));
System.out.println(maptiles2.get(1));
System.out.println(maptiles2.get(2));
System.out.println(maptiles2.get(3));
}
System.out.println("SUCCESS READING IN FILE");
}
(This is where the program is coming up with an error)
(I tested the graphics to make sure you could draw a )
(rectangle beforehand and it worked perfectly)
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
Rectangle rect1 = new Rectangle(5,5,100,200);
if(maptiles2.get(1).contains("X"))
{
g2.draw(rect1);
}
if(maptiles2.get(1).contains("O"))
{
g2.draw(rect1);
}
}
}
最后但同样重要的是,这是我要读入的文件(该文件称为 MapData)
XOXX
当我 运行 class 地图时,我得到这个错误:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
X
O
X
X
Success Reading in File
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at pkg9_weeks_project.drawningcomponent.paintComponent(drawningcomponent.java:60)
at javax.swing.JComponent.paint(JComponent.java:1053)
at javax.swing.JComponent.paintChildren(JComponent.java:886)
at javax.swing.JComponent.paint(JComponent.java:1062)
at javax.swing.JComponent.paintChildren(JComponent.java:886)
at javax.swing.JComponent.paint(JComponent.java:1062)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
at javax.swing.JComponent.paintChildren(JComponent.java:886)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5230)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java: 1572)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1495)
at javax.swing.RepaintManager.paint(RepaintManager.java:1265)
at javax.swing.JComponent.paint(JComponent.java:1039)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:79)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:116)
at java.awt.Container.paint(Container.java:1973)
at java.awt.Window.paint(Window.java:3901)
at javax.swing.RepaintManager.run(RepaintManager.java:835)
at javax.swing.RepaintManager.run(RepaintManager.java:807)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:7 5)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:807)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:782)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:731)
at javax.swing.RepaintManager.access00(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1720)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access0(EventQueue.java:97)
at java.awt.EventQueue.run(EventQueue.java:697)
at java.awt.EventQueue.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:7 5)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201 )
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105 )
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我可能是错的,但我有一种感觉,当它说:
java.lang.IndexOutOfBoundsException:索引:1,大小:0
这意味着 arraylist maptiles2 中不再有任何项目,但我此时不知道并且非常困惑。对于所有回复的人,感谢您的回复,他们非常感激!
编辑:谢谢大家的回答,答案是一个简单的错误,涉及 运行 在其他所有内容 运行 之后使用 readinmapdata 方法。谢谢你
@amit farag 和@svarog 提供有用的答案!
java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
表示您正在尝试访问列表中没有元素的第一个元素,请使用 add() 方法将值添加到您的 ArrayList
它可能不正确,但是您在调用 repaint()
之前是否调用过 readinmapdata()
?
可能会导致这个问题
我是这个网站的新手,所以如果我违反了任何规则,请原谅我。我已经找了几天了,还没有找到答案,如果以前有人回答过,请告诉我。
我正在创建一个 java 程序,它可以根据文件中的数据绘制图像(在本例中为矩形)。我遇到了无法修复或找不到解决方案的错误。
这是主要的 class 文件,我 运行 里面的所有内容。
package pkg9_weeks_project;
import java.io.FileNotFoundException;
import javax.swing.JFrame;
public class Map {
public static void main(String[] args) throws FileNotFoundException {
JFrame window = new JFrame();
window.setSize(640, 640);
window.setTitle("this is a frame of J's, otherwise known as a JFrame");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
drawningcomponent DC = new drawningcomponent();
window.add(DC);
drawningcomponent.readinmapdata(); //this is to make sure it is reading the file in
}
}
这是读入并将数据文件的数据添加到 ArrayList 的文件 并且...好吧..尝试使用 ArrayList
中的数据绘制矩形package pkg9_weeks_project;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
public class drawningcomponent extends JComponent
{
public static ArrayList<String> maptiles2 ;
public static void readinmapdata() throws FileNotFoundException
{
maptiles2 = new ArrayList<String>();
Scanner inputFile = new Scanner(new File("./src/MapData"));
while(inputFile.hasNextLine())
{
String line = inputFile.nextLine();
String data[] = line.split("");
String tile1 = data[0].trim();
String tile2 = data[1].trim();
String tile3 = data[2].trim();
String tile4 = data[3].trim();
maptiles2.add(tile1);
maptiles2.add(tile2);
maptiles2.add(tile3);
maptiles2.add(tile4);
(This was a test to make sure the items were added
and could be printed from the ArrayList)
System.out.println(maptiles2.get(0));
System.out.println(maptiles2.get(1));
System.out.println(maptiles2.get(2));
System.out.println(maptiles2.get(3));
}
System.out.println("SUCCESS READING IN FILE");
}
(This is where the program is coming up with an error)
(I tested the graphics to make sure you could draw a )
(rectangle beforehand and it worked perfectly)
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
Rectangle rect1 = new Rectangle(5,5,100,200);
if(maptiles2.get(1).contains("X"))
{
g2.draw(rect1);
}
if(maptiles2.get(1).contains("O"))
{
g2.draw(rect1);
}
}
}
最后但同样重要的是,这是我要读入的文件(该文件称为 MapData)
XOXX
当我 运行 class 地图时,我得到这个错误:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
X
O
X
X
Success Reading in File
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at pkg9_weeks_project.drawningcomponent.paintComponent(drawningcomponent.java:60)
at javax.swing.JComponent.paint(JComponent.java:1053)
at javax.swing.JComponent.paintChildren(JComponent.java:886)
at javax.swing.JComponent.paint(JComponent.java:1062)
at javax.swing.JComponent.paintChildren(JComponent.java:886)
at javax.swing.JComponent.paint(JComponent.java:1062)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
at javax.swing.JComponent.paintChildren(JComponent.java:886)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5230)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java: 1572)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1495)
at javax.swing.RepaintManager.paint(RepaintManager.java:1265)
at javax.swing.JComponent.paint(JComponent.java:1039)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:79)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:116)
at java.awt.Container.paint(Container.java:1973)
at java.awt.Window.paint(Window.java:3901)
at javax.swing.RepaintManager.run(RepaintManager.java:835)
at javax.swing.RepaintManager.run(RepaintManager.java:807)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:7 5)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:807)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:782)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:731)
at javax.swing.RepaintManager.access00(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1720)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access0(EventQueue.java:97)
at java.awt.EventQueue.run(EventQueue.java:697)
at java.awt.EventQueue.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:7 5)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201 )
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105 )
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我可能是错的,但我有一种感觉,当它说: java.lang.IndexOutOfBoundsException:索引:1,大小:0 这意味着 arraylist maptiles2 中不再有任何项目,但我此时不知道并且非常困惑。对于所有回复的人,感谢您的回复,他们非常感激!
编辑:谢谢大家的回答,答案是一个简单的错误,涉及 运行 在其他所有内容 运行 之后使用 readinmapdata 方法。谢谢你 @amit farag 和@svarog 提供有用的答案!
java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
表示您正在尝试访问列表中没有元素的第一个元素,请使用 add() 方法将值添加到您的 ArrayList
它可能不正确,但是您在调用 repaint()
之前是否调用过 readinmapdata()
?
可能会导致这个问题