当运行下面的代码时,我似乎得到了一个无限循环;我现在相信这是因为我在同一个对象中创建了一个对象的实例。 为什么这会产生无限循环? 代码是
/**
*
*/
package net.halalaboos.huzuni.console.commands;
import net.halalaboos.huzuni.Huzuni;
import net.halalaboos.huzuni.client.notifications.Notification;
import net.halalaboos.huzuni.console.Command;
import net.halalaboos.lib.io.FileUtils;
import net.minecraft.src.GuiPlayerInfo;
import net.minecraft.src.StringUtils;
import twitter4j.*;
import twitter4j.conf.ConfigurationBuilder;
import twitter4j.TwitterException;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* @author Halalaboos
* @since Aug 11, 2013
*/
public class TwitterAlerts implements Command {
public Status tweet;
public String tweetalert;
public ConfigurationBuilder cb = new ConfigurationBuilder();
TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();
TwitterAlerts object = new TwitterAlerts();
TwitterAlerts()
{
setkey();
checkstatus();
}
public void setkey()
{
setkey();
cb.setDebugEnabled(true);
cb.setOAuthConsumerKey("5c8ZcMgQihdS5kzGun9iSw");
cb.setOAuthConsumerSecret("aRUUbQnDu5yAjmdI23LdjRu6vDtPWaKhc6dFVklne0");
}
List<String> twitters = new ArrayList<String>();
List<String> pasttweets = new ArrayList<String>();
/**
* @see net.halalaboos.huzuni.console.Command#getAliases()
*/
@Override
public String[] getAliases() {
return new String[] {"twitteralerts", "tfollow"};
}
/**
* @see net.halalaboos.huzuni.console.Command#getHelp()
*/
@Override
public String[] getHelp() {
return new String[] {"Do /twitteralerts <name of tweeter> to be alerted of new tweets!"};
}
/**
* @see net.halalaboos.huzuni.console.Command#getDescription()
*/
@Override
public String getDescription() {
return "In game alerts of new tweets on followed accounts.";
}
/**
* @see net.halalaboos.huzuni.console.Command#run(java.lang.String, java.lang.String[])
*/
@Override
public void run(String input, String[] args) {
twitters.add(input);
}
public void checkstatus()
{
while(twitters != null)
{
try {
for(int i=0;i<twitters.size();i++)
{
tweet = twitter.getUserTimeline(twitters.get(i)).get(0);
if (pasttweets.contains(tweet.getText()))
{
}
else
{
Huzuni.notificationManager.add(new Notification("Tweet Retrieved", tweet.getText()));
pasttweets.add(tweet.getText());
}
}
} catch (TwitterException e) {
e.printStackTrace();
}
}
}
}
答案 0 :(得分:3)
你的班级有一个字段
TwitterAlerts object = new TwitterAlerts();
初始化此字段时,会创建一个新对象,该对象会创建一个新对象,令人作呕。
每个TwitterAlerts
对象都有一个TwitterAlerts
对象,其TwitterAlerts
有一个TwitterAlerts
...有这个想法吗?
摆脱那个领域。你甚至没有使用它。
答案 1 :(得分:0)
看看这些行
TwitterAlerts object = new TwitterAlerts();
TwitterAlerts()
{
setkey();
checkstatus();
}
当您创建TwitterAlerts的实例时,它将创建它的另一个实例。然后另一个创建它的实例....所以你知道为什么吗?