getter 和 setter 中的 NullPointerException
NullPointerException in getter and setter
编辑:
当我创建一个 TwitterModel
的实例时,不会执行 main 方法然后初始化 statuses
吗?所以我应该在调用 getUsertimeline()
?
时得到 statuses
的值
在 TwitterModel
的主要方法中设置后,我试图在 TwitterPanel
中获取 statuses
。但是,我在执行时得到 NullPointerException
:
for (Status status : tm.getUserTimeline()) {
twitterFeed1.setText("@" + status.getUser().getScreenName() + " - "
+ status.getText());
}
MainFrame.java
import java.awt.CardLayout;
public class MainFrame extends JFrame {
static CardLayout cardLayout;
static JPanel cards;
static ResponseList<Status> statuses;
public MainFrame() {
TwitterPanel tp = new TwitterPanel();
cards = new JPanel();
cardLayout = new CardLayout();
cards.setLayout(cardLayout); // Setting JPanel, cards, as CardLayout
// JFrame settings
add(cards); // Adding JPanel, cards to JFrame
// setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
setLayout(new FlowLayout());
setTitle("Demo");
setSize(1000, 500);
setVisible(true);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cards.add(tp, "tp");
cardLayout.show(cards, "tp");
}
public static void main(String[] args) throws TwitterException {
MainFrame asd = new MainFrame();
}
TwitterPanel.java(NPE发生在这里)
import javax.swing.JPanel;
public class TwitterPanel extends JPanel {
// Global variables
static TwitterModel tm = new TwitterModel();
public TwitterPanel() {
// JPanel layout
setBorder(new LineBorder(new Color(0, 0, 0)));
setLayout(null);
// JLabel
JLabel twitterLabel = new JLabel("Twitter");
twitterLabel.setBounds(208, 0, 58, 30);
add(twitterLabel);
// JTextArea
TextArea twitterFeed1 = new TextArea();
twitterFeed1.setBounds(17, 28, 212, 248);
add(twitterFeed1);
for (Status status : tm.getUserTimeline()) {
twitterFeed1.setText("@" + status.getUser().getScreenName() + " - "
+ status.getText());
}
TextArea twitterFeed2 = new TextArea();
twitterFeed2.setBounds(246, 28, 212, 248);
add(twitterFeed2);
}
public static void main(String[] args) {}
TwitterModel.java
import twitter4j.Paging;
public class TwitterModel {
static ResponseList<Status> statuses;
static String user;
static Paging count = new Paging(1, 5);
static Twitter twitter;
public TwitterModel() {}
public ResponseList<Status> getUserTimeline() {
return TwitterModel.statuses;
}
public static void main(String[] args) {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey(xxx")
.setOAuthConsumerSecret(
"xxx ")
.setOAuthAccessToken(
xxx")
.setOAuthAccessTokenSecret(
"xxx");
TwitterFactory tf = new TwitterFactory(cb.build());
twitter = tf.getInstance();
try {
if (args.length == 1) {
user = args[0];
statuses = twitter.getUserTimeline(user, count);
Controller con = new Controller();
con.settingStatus(statuses);
} else {
// user = twitter.verifyCredentials().getScreenName();
user = "Ashton";
System.out.println("Successful");
statuses = twitter.getUserTimeline(user, count);
}
System.out.println("Showing @" + user + "'s user timeline.");
for (Status status : statuses) {
System.out.println("@" + status.getUser().getScreenName()
+ " - " + status.getText());
}
} catch (TwitterException te) {
te.printStackTrace();
System.out.println("Failed to get timeline: " + te.getMessage());
System.exit(-1);
}
}
main 方法是静态的,在您启动程序时调用。每个程序只有一个主要方法。
public TwitterModel() {}
这是创建实例时调用的构造函数。
尝试将您的主要方法代码放入此处
问题背景:
Twitter 身份验证代码要求 String[] args
参数在执行前存在。但是,在创建上述 class 的实例时,我必须将 args
初始化为 null
。因此收到 NullPointerException
.
答案:
我相信解决方案是构造函数重载,如下所示。如果我错了请纠正我
MainFrame.java
public class MainFrame extends JFrame{
public MainFrame(){
....
}
}
public static void Twitter(){
... // Twitter's authentication... etc are executed here
}
public static void main(String[] args){
Twitter();
...
}
编辑:
当我创建一个 TwitterModel
的实例时,不会执行 main 方法然后初始化 statuses
吗?所以我应该在调用 getUsertimeline()
?
statuses
的值
在 TwitterModel
的主要方法中设置后,我试图在 TwitterPanel
中获取 statuses
。但是,我在执行时得到 NullPointerException
:
for (Status status : tm.getUserTimeline()) {
twitterFeed1.setText("@" + status.getUser().getScreenName() + " - "
+ status.getText());
}
MainFrame.java
import java.awt.CardLayout;
public class MainFrame extends JFrame {
static CardLayout cardLayout;
static JPanel cards;
static ResponseList<Status> statuses;
public MainFrame() {
TwitterPanel tp = new TwitterPanel();
cards = new JPanel();
cardLayout = new CardLayout();
cards.setLayout(cardLayout); // Setting JPanel, cards, as CardLayout
// JFrame settings
add(cards); // Adding JPanel, cards to JFrame
// setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
setLayout(new FlowLayout());
setTitle("Demo");
setSize(1000, 500);
setVisible(true);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cards.add(tp, "tp");
cardLayout.show(cards, "tp");
}
public static void main(String[] args) throws TwitterException {
MainFrame asd = new MainFrame();
}
TwitterPanel.java(NPE发生在这里)
import javax.swing.JPanel;
public class TwitterPanel extends JPanel {
// Global variables
static TwitterModel tm = new TwitterModel();
public TwitterPanel() {
// JPanel layout
setBorder(new LineBorder(new Color(0, 0, 0)));
setLayout(null);
// JLabel
JLabel twitterLabel = new JLabel("Twitter");
twitterLabel.setBounds(208, 0, 58, 30);
add(twitterLabel);
// JTextArea
TextArea twitterFeed1 = new TextArea();
twitterFeed1.setBounds(17, 28, 212, 248);
add(twitterFeed1);
for (Status status : tm.getUserTimeline()) {
twitterFeed1.setText("@" + status.getUser().getScreenName() + " - "
+ status.getText());
}
TextArea twitterFeed2 = new TextArea();
twitterFeed2.setBounds(246, 28, 212, 248);
add(twitterFeed2);
}
public static void main(String[] args) {}
TwitterModel.java
import twitter4j.Paging;
public class TwitterModel {
static ResponseList<Status> statuses;
static String user;
static Paging count = new Paging(1, 5);
static Twitter twitter;
public TwitterModel() {}
public ResponseList<Status> getUserTimeline() {
return TwitterModel.statuses;
}
public static void main(String[] args) {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey(xxx")
.setOAuthConsumerSecret(
"xxx ")
.setOAuthAccessToken(
xxx")
.setOAuthAccessTokenSecret(
"xxx");
TwitterFactory tf = new TwitterFactory(cb.build());
twitter = tf.getInstance();
try {
if (args.length == 1) {
user = args[0];
statuses = twitter.getUserTimeline(user, count);
Controller con = new Controller();
con.settingStatus(statuses);
} else {
// user = twitter.verifyCredentials().getScreenName();
user = "Ashton";
System.out.println("Successful");
statuses = twitter.getUserTimeline(user, count);
}
System.out.println("Showing @" + user + "'s user timeline.");
for (Status status : statuses) {
System.out.println("@" + status.getUser().getScreenName()
+ " - " + status.getText());
}
} catch (TwitterException te) {
te.printStackTrace();
System.out.println("Failed to get timeline: " + te.getMessage());
System.exit(-1);
}
}
main 方法是静态的,在您启动程序时调用。每个程序只有一个主要方法。
public TwitterModel() {}
这是创建实例时调用的构造函数。 尝试将您的主要方法代码放入此处
问题背景:
Twitter 身份验证代码要求 String[] args
参数在执行前存在。但是,在创建上述 class 的实例时,我必须将 args
初始化为 null
。因此收到 NullPointerException
.
答案:
我相信解决方案是构造函数重载,如下所示。如果我错了请纠正我
MainFrame.java
public class MainFrame extends JFrame{
public MainFrame(){
....
}
}
public static void Twitter(){
... // Twitter's authentication... etc are executed here
}
public static void main(String[] args){
Twitter();
...
}