Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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 使用Eclipse时出现奇数错误_Java - Fatal编程技术网

Java 使用Eclipse时出现奇数错误

Java 使用Eclipse时出现奇数错误,java,Java,我正在做一个家庭作业,用左、右、上、下按钮在屏幕上移动一个球。此外,使用绿色和红色按钮更改球的颜色。出于某种原因,我的侦听器向我发出错误“Btns.RightListener无法解析为类型”。我不知道为什么 任何帮助都将不胜感激 这就是我目前所拥有的 主要类别: import javax.swing.*; @SuppressWarnings("serial") public class Lab2Main extends JFrame { Lab2Main() {

我正在做一个家庭作业,用左、右、上、下按钮在屏幕上移动一个球。此外,使用绿色和红色按钮更改球的颜色。出于某种原因,我的侦听器向我发出错误“Btns.RightListener无法解析为类型”。我不知道为什么

任何帮助都将不胜感激

这就是我目前所拥有的

主要类别:

import javax.swing.*;

@SuppressWarnings("serial")
public class Lab2Main extends JFrame {


        Lab2Main()
    {
        setTitle("Lab 2 - Move The Ball");
        Lab2 p = new Lab2();
        add(p);
    }

    public static void main (String[] args) { 

        Lab2 frame = new Lab2();
        frame.setTitle("Lab 2 - Move The Ball");
        frame.setSize(450, 500);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }   

}
类容纳侦听器:

import javax.swing.*; 
import java.awt.*;

@SuppressWarnings("serial")
public class Lab2 extends JFrame { 

    Btns canvas = new Btns();
    JPanel panel = new JPanel();

    JButton jbtL = new JButton("Left");
    JButton jbtR = new JButton("Right");
    JButton jbtU = new JButton("Up");
    JButton jbtD = new JButton("Down");
    JButton jbtRd = new JButton("Red");
    JButton jbtG = new JButton("Green");

    Lab2()
        {
        setLayout(new BorderLayout());

        panel.add(jbtR);
        panel.add(jbtL);
        panel.add(jbtU);
        panel.add(jbtD);
        panel.add(jbtRd);
        panel.add(jbtG);

        this.add(canvas, BorderLayout.CENTER);
        this.add(panel, BorderLayout.SOUTH);

        jbtL.addActionListener(new Btns.LeftListener(canvas));
        jbtR.addActionListener(new Btns.RightListener(canvas));
        jbtU.addActionListener(new Btns.UpListener(canvas));
        jbtD.addActionListener(new Btns.DownListener(canvas));
        jbtRd.addActionListener(new Btns.RdColorChangeListener(canvas));
        jbtG.addActionListener(new Btns.GColorChangeListener(canvas));
        }
}   
按住按钮的类:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class  Btns extends JPanel
{
    int radius = 5;
    int x = -1;
    int y = -1;

        protected void paintComponent(Graphics g) {
            if (x < 0 || y < 0)
            {
                x = getWidth() / 2 -radius;
                y = getHeight() / 2 -radius;
            }
            super.paintComponent(g);
            g.setColor(Color.RED);
            g.fillOval(5,10,25,25);
    } 
    public void moveLeft()
    { 

             x -= 5; 
             this.repaint(); 
        } 

        public void moveRight()
        { 

            x += 5; 
            this.repaint(); 
        } 
        public void moveUp()
        { 

            y -= 5; 
            this.repaint(); 
        } 

        public void moveDown()
        { 
            y += 5; 
            this.repaint(); 
        } 


        public class LeftListener implements ActionListener
        { 
            private Btns canvas; 

            LeftListener(Btns canvas) 
            { 
              this.canvas = canvas; 
            } 

             public void actionPerformed(ActionEvent e)
            { 
             canvas.moveLeft(); 
            } 


        public class RightListener implements ActionListener
        { 
            private Btns canvas; 

            RightListener(Btns canvas) 
            { 
                this.canvas = canvas; 
            } 

            public void actionPerformed(ActionEvent e)
            { 
              canvas.moveRight(); 
            } 
        } 


         class UpListener implements ActionListener
         { 
            private Btns canvas; 

            UpListener(Btns canvas) 
            { 
                this.canvas = canvas; 
            } 

            public void actionPerformed(ActionEvent e)
            { 
                canvas.moveUp(); 
            } 
        } 



        class DownListener implements ActionListener
        { 
            private Btns canvas; 

            DownListener(Btns canvas) 
            { 
                this.canvas = canvas; 
            } 

            public void actionPerformed(ActionEvent e)
            { 
             canvas.moveDown(); 
            } 
        }

        class RdColorChangeListener implements ActionListener 
            { 
            private Btns canvas; 

            RdColorChangeListener(Btns canvas) { 
                this.canvas = canvas; 
            } 
            public void actionPerformed(ActionEvent e){ 
                canvas.setColor(Color.RED); 
                repaint();
            } 

        class GColorChangeListener implements ActionListener 
            { 
            private Btns canvas; 

            GColorChangeListener(Btns canvas) { 
                this.canvas = canvas; 
            } 
            public void actionPerformed(ActionEvent e){ 
                canvas.setColor(Color.GREEN); 
                repaint();
            } 
       }
    }
  }


        public void setColor(Color red) {
        // TODO Auto-generated method stub

        }
}
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JPanel;
@抑制警告(“串行”)
公共类BTN扩展JPanel
{
int半径=5;
int x=-1;
int y=-1;
受保护组件(图形g){
if(x<0 | | y<0)
{
x=getWidth()/2-半径;
y=getHeight()/2-半径;
}
超级组件(g);
g、 setColor(Color.RED);
g、 圆形(5,10,25,25);
} 
公共空间左移()
{ 
x-=5;
这个。重新绘制();
} 
公权
{ 
x+=5;
这个。重新绘制();
} 
公共空间向上移动()
{ 
y-=5;
这个。重新绘制();
} 
公共无效向下移动()
{ 
y+=5;
这个。重新绘制();
} 
公共类LeftListener实现ActionListener
{ 
私人基站;
LeftListener(Btns画布)
{ 
this.canvas=画布;
} 
已执行的公共无效操作(操作事件e)
{ 
canvas.moveLeft();
} 
公共类RightListener实现ActionListener
{ 
私人基站;
RightListener(Btns画布)
{ 
this.canvas=画布;
} 
已执行的公共无效操作(操作事件e)
{ 
canvas.moveRight();
} 
} 
类UpListener实现ActionListener
{ 
私人基站;
上传器(Btns画布)
{ 
this.canvas=画布;
} 
已执行的公共无效操作(操作事件e)
{ 
canvas.moveUp();
} 
} 
类DownListener实现ActionListener
{ 
私人基站;
下行侦听器(Btns画布)
{ 
this.canvas=画布;
} 
已执行的公共无效操作(操作事件e)
{ 
canvas.moveDown();
} 
}
类RdColorChangeListener实现ActionListener
{ 
私人基站;
RdColorChangeListener(Btns画布){
this.canvas=画布;
} 
已执行的公共无效操作(操作事件e){
canvas.setColor(Color.RED);
重新油漆();
} 
类GColorChangeListener实现ActionListener
{ 
私人基站;
GColorChangeListener(Btns画布){
this.canvas=画布;
} 
已执行的公共无效操作(操作事件e){
canvas.setColor(Color.GREEN);
重新油漆();
} 
}
}
}
公共空间设置颜色(红色){
//TODO自动生成的方法存根
}
}

Btns.RightListener
(事实上,
Btns
的所有内部类)需要声明为
静态类,以便像您正在做的那样创建新实例。只需在每个类声明中添加
static
修饰符。否则,您需要执行以下操作:

jbtL.addActionListener(canvas.new Btns.LeftListener(canvas));

哦,正如@antlersoft指出的,您需要更正类嵌套。

Btns.RightListener
(事实上,
Btns
)的所有内部类都需要声明为
静态
类,以便像您这样创建新实例。只需在每个类声明中添加
static
修饰符。否则,您需要执行以下操作:

jbtL.addActionListener(canvas.new Btns.LeftListener(canvas));

哦,正如@antlersoft指出的,您需要更正类嵌套。

您在Btns.LeftListener上缺少一个closing},因此Eclipse认为RightListener在LeftListener的内部。

您在Btns.LeftListener上缺少一个closing},因此Eclipse认为RightListener在LeftListener的内部。

正如[家庭作业标记信息]所解释的那样请不要在新问题上添加家庭作业标签。您的问题可以不带标签按原样提出。此外,你的问题越短,回答的速度就越快。正如[家庭作业标签信息]所解释的,请不要将家庭作业标签添加到新问题中。您的问题可以不带标签按原样提出。另外,你提出的问题越短,回答的速度就越快。这就是问题所在。但是,当我修复该问题时,我得到了一个“没有Btns类型的封闭实例可访问。必须使用Btns类型的封闭实例(例如,x.new A(),其中x是Btns的实例)来限定分配。”错误?Ted Hopp(其他答案)给出了问题所在的封闭实例问题的答案。但是,当我修复该问题时,我得到了一个“没有Btns类型的封闭实例可访问。必须使用Btns类型的封闭实例(例如,x.new A(),其中x是Btns的实例)来限定分配。”错误?Ted Hopp(其他答案)有封闭实例问题的答案。当我做出您在上面指出的更改时,我仍然会得到错误,“无法访问Btns类型的封闭实例。必须使用Btns类型的封闭实例限定分配(例如,x.new A(),其中