0

我正在尝试创建大量 JTextField 对象,但由于某种原因,我的代码无法编译。我已经玩了太久了,我找不到任何让编译器生气的好理由;这是我的代码,只有一个长度为 2 的数组:

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

public class SUDOKU_temp extends JApplet
{
    //declare fields

    public JTextField[] fields = new JTextField[2];
    fields[0] = new JTextField();
    fields[1] = new JTextField();

    //other stuff happens down here that the compiler is ok with
}

如果我只运行长度为 1 的数组的代码,我会得到完全相同的错误,它们是:

linux63:~demo$ ./compile
SUDOKU_temp.java:11: ']' expected
    fields[0] = new JTextField();
           ^
SUDOKU_temp.java:11: ';' expected
    fields[0] = new JTextField();
            ^
SUDOKU_temp.java:11: illegal start of type
    fields[0] = new JTextField();
              ^
SUDOKU_temp.java:11: <identifier> expected
    fields[0] = new JTextField();
               ^
SUDOKU_temp.java:11: ';' expected
    fields[0] = new JTextField();
                   ^
SUDOKU_temp.java:11: illegal start of type
    fields[0] = new JTextField();
                              ^
SUDOKU_temp.java:11: <identifier> expected
    fields[0] = new JTextField();
                               ^

我觉得这是编译器的问题,而不是代码的问题,任何有关如何调试的帮助将不胜感激。提前致谢!!

4

3 回答 3

5

非声明性语句不能位于类块中。你需要放置

fields[0] = new JTextField();
fields[1] = new JTextField();

在构造函数、方法或静态初始化程序块内。对于这个小程序,您可以使用:

public void init() {
   for (int i=0; i < fields.length; i++ ) {
      fields[i] = new JTextField();
   }
}
于 2013-01-17T22:16:03.230 回答
5

您不能在方法之外运行代码(除非它是声明)。您需要以某种方法或使用数组文字初始化它们。

数组字面量:

public JTextField[] fields ={ new JTextField(),new JTextField()};

在一个方法内:

public JTextField[] fields=new JTextField[2];
public void method(){
    fields[0]=new JTextField();
    fields[1]=new JTextField();
}
于 2013-01-17T22:16:15.183 回答
3

要添加到上述内容,您可以在声明时初始化数组中的对象,如下所示:

public class SUDOKU_temp {

  private JTextField[] fields = {new JTextField(), new JTextField()};
于 2013-01-17T22:20:26.893 回答