Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链表问题(Java小程序)_Java_Applet - Fatal编程技术网

链表问题(Java小程序)

链表问题(Java小程序),java,applet,Java,Applet,在这段代码中,我试图初始化一个椭圆形链表,这些椭圆形链表被发送到一个要绘制的类 public void actionPerformed(ActionEvent e) { oval p; Graphics g = this.getGraphics(); int x, y, height, width, fill; ListIterator li; LinkedList<oval> list = new LinkedList<oval&g

在这段代码中,我试图初始化一个椭圆形链表,这些椭圆形链表被发送到一个要绘制的类

public void actionPerformed(ActionEvent e)
  {
    oval p;
    Graphics g = this.getGraphics();
    int x, y, height, width, fill;
    ListIterator li;
    LinkedList<oval> list = new LinkedList<oval>();
    li = list.listIterator();
    x = Integer.parseInt(xfield.getText());
    y = Integer.parseInt(yfield.getText());
    height = Integer.parseInt(heightf.getText());
    width = Integer.parseInt(widthf.getText());
    list.add(new oval(x,y,height,width));
    repaint();
    while (li.hasNext()) 
    {
        p = (oval)li.next();
        p.draw(g);
    }

我怎样才能解决这个问题?(第97行是p=(椭圆形)li.next();如果有帮助的话。)

在更改列表的状态之前,先获得列表的迭代器,然后使用迭代器进行迭代,但现在迭代器不再合适。解决方案:改变顺序。在将项目添加到列表后,仅获取迭代器,或者使用ListIterator并使用ListIterator添加项目


其他问题:您的绘图不正确,因为您不应该通过调用组件上的
getGraphics()
来获取图形对象,因为这会返回一个短期对象。为了理解我的意思,一旦你让你的图形用户界面工作,最小化,然后在完成这个绘图后恢复它,看着你的绘图消失。使用LinkedList字段,在actionPerformed方法中更改其状态,调用
repaint()
,并让组件的
paintComponent(Graphics g)
方法(或
paint(Graphics g)
方法,如果这是AWT程序)为您绘制图形。

您可以通过使用remove()而不是调用next()来消除此问题当对象被其他任务使用时,您不希望访问该对象,这意味着没有并发访问

while (li.hasNext()) 
{
  p = (oval)li.remove();
  p.draw(g);
}

在将任何椭圆添加到链接列表之前,您将创建列表迭代器。但是,当一个新项目添加到链表中时,迭代器不会更新。这就是为什么会发生异常。若要修复此问题,请在添加新椭圆后初始化列表迭代器。

谢谢。我试着只用图形g;而不是图形g=this.getGraphics();但是它给了我一个错误,说“局部变量g可能还没有初始化”。@Bryan:请重新阅读我的建议。绘图应在
paint(…)
(如果是AWT)或
paintComponent(…)
方法(如果是Swing)中完成,使用JVM提供给该方法的图形参数。为什么要编写小程序?如果是老师指定的,请参考他们。
while (li.hasNext()) 
{
  p = (oval)li.remove();
  p.draw(g);
}