简而言之,我创建了一个类Something witch具有一个带有JFrame的函数,其中我有一个标签和一个按钮。在按钮上有一个addActionListener(new changeLabel())。我在src包中为侦听器类了changeLabel,但当我启动应用程序并单击按钮时,在changeLabel上抛出一个NullPointerException
NameLabel.setText(“Name Changed”);
行。我想提到的是,如果我在Something类中创建这个listener类,就会工作得很好。我不知道为什么抛出null异常,因为标签是先初始化的,然后按钮只想改变文本。我尝试创建一个getFunction,调用那个标签,尝试使用object Something,使用object changeLabel等。但不管用。这里有一些代码
package trying;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.*;
public class Something {
JFrame frame;
JLabel changeName;
JButton button;
public void gui(){
frame = new JFrame();
frame.setSize(200, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//is just an example
changeName = new JLabel("Stefan");
//is just an example
button = new JButton("Change");
button.addActionListener(new changeLabel());
frame.getContentPane().add(changeName, BorderLayout.NORTH);
frame.getContentPane().add(button, BorderLayout.SOUTH);
frame.setVisible(true);
}
public static void main(String args[]){
new Something().gui();
}
}
listener类
package trying;
import java.awt.event.*;
public class changeLabel extends Something implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
changeName.setText("Andrei");
}
}
我该如何解决这个问题呢?
问题是,因为changelabel
类扩展了something
,所以它将包含自己的changeName
变量,该变量未初始化为==null
。
您可以:
ChangeLabel
实现成为某些东西的私有类(良好做法)或JLabel
传递给其构造函数。在这两种情况下,changelabel
都不应该扩展something
。
代码示例#1:
public class Something {
JFrame frame;
JLabel changeName;
JButton button;
public void gui(){
frame = new JFrame();
frame.setSize(200, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//is just an example
changeName = new JLabel("Stefan");
//is just an example
frame.getContentPane().add(changeName, BorderLayout.NORTH);
button = new JButton("Change");
button.addActionListener(new changeLabel());
frame.getContentPane().add(button, BorderLayout.SOUTH);
frame.setVisible(true);
}
public static void main(String args[]){
new Something().gui();
}
class changeLabel implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
changeName.setText("Andrei");
}
}
}
代码示例#2:
public class Something {
...
public void gui() {
...
button.addActionListener(new changeLabel(changeName));
}
}
public class changeLabel implements ActionListener {
private final JLabel label;
public changeLabel(JLabel label) {
this.label = label;
}
@Override
public void actionPerformed(ActionEvent e) {
label.setText("Andrei");
}
}
据我所知,在Java11中,这两个操作可以在一行中完成,不是吗?
下午好: 我最近创建了一个类“X”,它包含一个单一属性“network”,定义为一个映射,使用字符串作为键,另一个映射作为值(double map)。对于此类,将使用“hashmap”实现。 该类大致如下所示: 但是,当我执行函数中包含的network.put指令时,编译器会自动检测到一个错误:“表达式预期”。如果可能,我想知道在向映射中添加新的键值元素时是否使用了错误的语法,或者是否是映射的初始
同一类型的扫描仪方法在一个地方工作,但在另一个地方不工作。。。如果这改变了任何答案,我将使用eclipse作为我的代码编辑器。如果不是在这里,所有变量都已在别处声明。 如果有人知道如何解决这个问题,我将永远感激你:) 这一个正在工作: 这个不起作用: 错误消息:
为什么我不能这样做? 我得到: 致命错误:常量表达式包含无效操作 这有什么办法吗?
问题内容: 我在用Java工作。 我通常会这样设置一些对象: 问题是:在此示例中是否等于,按原样我可以假定对未初始化的对象进行空检查将是准确的? 问题答案: 正确,未显式初始化的引用类型的静态成员和实例成员都由Java 设置为。相同的规则适用于数组成员。 根据Java语言规范的第4.12.5节: 变量的初始值 程序中的每个变量在使用值之前都必须具有一个值: 每个类变量,实例变量或数组组件在创建时均
以下是MyService应用程序: 我已经指定了@AllargsConstructor。当我试图为上面的类编写单元测试时,它失败了。以下是我如何编写单元测试: 抛出的错误是: Java:类中的构造函数MyService不能应用于给定类型;必填:未找到参数:原因:实际参数列表和正式参数列表的长度不同 但当我在MyService中显式定义构造函数时,测试就会通过。这里有人能帮我吗?