我得到java:105:错误:非法字符:\ 29 }
我正在编写一个程序,用户可以点击右/左/上/下按钮并在屏幕上移动“球”。
我无法弄清楚我做错了什么。有人可以帮帮我吗?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Lab2a extends JFrame {
Lab2a(){
setTitle("Lab 1b - Application #2");
Lab2Panel p = new Lab2Panel();
add(p);
}
public static void main(String[] args){
Lab2 frame = new Lab2();
frame.setTitle("Lab2 Application # 1");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
frame.setVisible(true);
}
}
class Lab2Panel extends JPanel{
Lab2Button canvas = new Lab2Button();
JPanel panel = new JPanel();
Lab2Panel () {
setLayout(new BorderLayout());
JButton leftButton = new JButton("left");
JButton rightButton = new JButton("right");
JButton upButton = new JButton("up");
JButton downButton = new JButton("down");
panel.add(leftButton);
panel.add(rightButton);
panel.add(upButton);
panel.add(downButton);
this.add(canvas, BorderLayout.CENTER);
this.add(panel, BorderLayout.SOUTH);
leftButton.addActionListener(new LeftListener(canvas));
rightButton.addActionListener(new RightListener(canvas));
upButton.addActionListener(new UpListener(canvas));
downButton.addActionListener(new DownListener(canvas));
}
}
class Lab2Button 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.drawOval(x,y, 2 * radius, 2 * radius);
}
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();
}
}
class LeftListener implements ActionListener{
private Lab2Button canvas;
LeftListener(Lab2Button canvas) {
this.canvas = canvas;
}
public void actionPerformed(ActionEvent e){
canvas.moveLeft();
}
}
很抱歉105就是这一行。
class RightListener implements ActionListener{
private Lab2Button canvas;
RightListener(Lab2Button canvas) {
this.canvas = canvas;
}
public void actionPerformed(ActionEvent e){
canvas.moveRight();
}
}
class UpListener implements ActionListener{
private Lab2Button canvas;
UpListener(Lab2Button canvas) {
this.canvas = canvas;
}
public void actionPerformed(ActionEvent e){
canvas.moveUp();
}
}
class DownListener implements ActionListener{
private Lab2Button canvas;
DownListener(Lab2Button canvas) {
this.canvas = canvas;
}
public void actionPerformed(ActionEvent e){
canvas.moveDown();
}
}
答案 0 :(得分:2)
所以,似乎存在一些问题,但并不完全像你所描述的那样。
第15行Lab2 frame = new Lab2();
大概应为Lab2a frame = new Lab2a();
,或者您错过了包含Lab2
对象的声明。
问题1解决后,代码编译正常。这意味着错误发生在两个地方之一。
您可能排除的Lab2
声明。
源文件的字节,在这种情况下,最好的想法是从其他源(如StackOverflow)中删除并重新粘贴代码,或者更好地重新键入代码。您可以在此过程中改进格式:)
答案 1 :(得分:2)
我尝试使用您的代码并简单地更改(第20行):
Lab2 frame = new Lab2();
到
Lab2a frame = new Lab2a();
它是否在我的机器上正常工作..减去上下颠倒的事实:P
编辑:NetBeans也会自动解决您的导入:
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
根据你所拥有的,这可能在让它为我工作方面发挥了作用。
答案 2 :(得分:1)
没有行号,很难猜到,但看起来你有两个紧密的括号,你不应该:
public static void main(String[] args){
Lab2 frame = new Lab2();
frame.setTitle("Lab2 Application # 1");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
frame.setVisible(true);
} <--- EXTRA
}
更新:如果你的意图是一个类,其余的是内部类,那么上面标记为额外的括号应该移动到文件的底部。
答案 3 :(得分:1)
无法理解错误在哪里..
public static void main(String[] args){
Lab2 frame = new Lab2();
}
你的意思是这段代码中的Lab2a?