Java 按ENTER键不初始化if-else语句

Java 按ENTER键不初始化if-else语句,java,swing,Java,Swing,对于这个问题,JTextField的输入键没有初始化chat()中的if-else语句 我试着把userinput.addKeyListener(这个)内部公共吉他测试()也是,但它不起作用 我如何让它工作,以便我可以初始化if-else语句来回答我的答案。给出的错误是: Exception in thread "main" java.lang.NullPointerException public类guitest扩展了JFrame实现了KeyListener{ ArrayList ques

对于这个问题,
JTextField
的输入键没有初始化
chat()中的
if-else
语句

我试着把
userinput.addKeyListener(这个)内部
公共吉他测试()也是,但它不起作用

我如何让它工作,以便我可以初始化if-else语句来回答我的答案。给出的错误是:

Exception in thread "main" java.lang.NullPointerException

public类guitest扩展了JFrame实现了KeyListener{
ArrayList questionarray=新的ArrayList();
ArrayList answerarray=新的ArrayList();
public JTextArea scriptarea=新JTextArea();
public JTextField userinput=new JTextField();
公共字符串输入;
公共数组列表getquestionarray(){
返回数组;
}
公共阵列列表getanswerarray(){
返回应答器数组;
}
公共吉他测试(){
//桂
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这个。设置大小(600600);
此.setVisible(true);
此参数为.setresizeable(false);
此.setLayout(null);
这是一个设定标题(“奴才AI”);
setLocationRelativeTo(空);
//jtextfield位置和字段
setLocation(7530);
userinput.setSize(580,30);
//JTEXT区域位置和大小
脚本区域。设置位置(15,5);
scriptarea.setSize(560510);
scriptarea.setEditable(false);
//向框架添加方法
this.add(userinput);
添加(脚本区域);
chat();
}
@凌驾
public void keyTyped(KeyEvent e){
}
@凌驾
按下公共无效键(按键事件e){
如果(例如getKeyChar()==KeyEvent.VK_ENTER){
stringinput=userinput.getText();
scriptarea.append(“[You]”+stringinput+“\n”);
userinput.setText(“”);
}
if(e.getKeyChar()==KeyEvent.VK_ESCAPE){
系统出口(0);
}
}
@凌驾
公共无效密钥已释放(密钥事件e){
}
公共聊天室(){
随机=新随机();
ArrayList greetingarray=问候语();
ArrayList quotesarray=quotes();
scriptarea.append(“[AI Minion]”+greetingarray.get(random.nextInt(greetingarray.size()))+“\n”);
userinput.addKeyListener(这个);
if(greetingarray.contains(stringinput)){

对于(int i=0;i代码中的问题太多:

  • 您在课程开始时有以下陈述:

    this.setVisible(true);
    
    这应该是程序中最后一行,在
    pack()
    之后

  • extends JFrame
    您不应该扩展
    JFrame
    ,因为您没有改变它的任何功能,而且它是一个刚性容器,您不能将它放在其他容器中。请改为基于
    JPanel
    s构建您的程序。阅读:

  • guitest
    ->
    guitest
    stringinput;
    ->
    stringinput
    ,请按照以下步骤操作:

    • firstWordLowerCaseVariable
    • firstWordLowerCaseMethod()
    • FirstWordUpperCaseClass
    • 所有单词大写常量
    并始终如一地使用它们,因为这将使您和我们更容易阅读该程序

  • this.setLayout(null);
    .setLocation(…);
    会让你头疼,而不是使用一个(或组合),以您使用它并尝试将其导出到另一台PC中时发生的情况为例。Swing设计用于布局管理器,而不是绝对像素定位,因为它必须处理不同的PLAF、操作系统、屏幕大小和分辨率,布局管理器将解决所有这些问题

  • 关于(3),您的方法名称应该是动词
    greetings()
    应该是
    getGreetings()
    ,例如(您的问题中没有包含的方法,它可能返回
    null

  • 我也只将变量声明为类成员,但只在构造函数上初始化它们

  • this.setSize(600600);
    调用
    pack()
    (在使用布局管理器之后)


  • 由于您的代码不完整,请学习使用调试器并查看哪个变量是
    null
    ,这就是您的代码被破坏的原因,异常将在前三行告诉您。

    您应该提供更相关的代码片段。不清楚您的类实现了哪些交互,它是如何调用的。为什么要调用new guitest()因为根据惯例,所有类名(以及它们的构造函数)都要大写(第一个字母)。
    this.setVisible(true);