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);