我遇到了一个可能有一个简单修复的问题,但我似乎无法让它发挥作用。
我需要我的程序暂停或等到用户选择跳过按钮或正/负反馈按钮,然后再继续。 我认为这将需要基本的线程,但我不确定如何实现它。任何帮助都将得到应用。
gui显示在一个单独的类(GUI)中,其余的是另一个类。 代码有点乱,因为它是在12小时内为Hackfest编码的。
编辑:通过删除按钮监听器并使变量保持静态来解决它。public void onStatus(Status status) {
//this is a listener from the Twitter4J class. Every time new Tweet comes in it updates.
for (int i = 0; i <= posWords.length; i++) {
if (status.getText().toLowerCase().contains(gui.sCrit.getText())
&& (status.getText().toLowerCase().contains(posWords[i].toLowerCase()))) {
//If the tweet matches this criteria do the following:
String tweet;
Status tempStoreP;
System.out.println("Flagged positive because of " +posWords[i].toLowerCase()+" " + i);
tempStoreP = status;
tweet = tempStoreP.getUser().getName() + ":" + tempStoreP.getText() + " | Flagged as positive \n\r";
gui.cTweet.setText(tweet);
//Write to log
try {
wPLog.append("~" + tweet);
} catch (IOException e) {
}
//Add action listeneer to gTweet.
//here is my problem. I want it to wait until a user has clicked one of these buttons before moving on and getting the next Tweet. It has to pause the thread until a button is clicked then it can only move on to getting another Tweet.
//the problem is that the button listener uses local variables to work.
gui.gTweet.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (gui.pTweet.getText().equalsIgnoreCase("")) {
gui.pTweet.setText("Please type a response");
} else if (gui.pTweet.getText().equalsIgnoreCase("Please type a response")) {
gui.pTweet.setText("Please type a response");
} else {
try {
Status sendPTweet = twitter
.updateStatus("@" + tempStoreP.getUser().getScreenName() + " "
+ gui.pTweet.getText());
} catch (TwitterException e1) {
}
}
gui.gTweet.removeActionListener(this);
}
});
//add Aaction listert to sTweet
gui.sTweet.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
wPLog.append("Skipped \n\r");
} catch (IOException e1) {
}
gui.sTweet.removeActionListener(this);
}
});
}
感谢您的帮助。另外,如果有人可以告诉我为什么单击该按钮时,它会循环并使用相同的消息阻止人们,这将是有帮助的。谢谢。
答案 0 :(得分:1)
我想到了多线程的事情,我觉得它不够容易。 如果我是你,我会禁用所有控件,除了要点击的按钮。
示例:
JButton button = new JButton( "Test );
button.setEnabled( false );
用户无法点击按钮,直到您使用button.setEnabled( true );
,如果您只是禁用所有控件,但按钮应该没问题。
答案 1 :(得分:0)
根据我对你的问题的理解,你可以像这样使用多线程:
JFrame
或
如果您有2 JPanel
,则可以使用dispose方法。
或
您可以使用多个pnl1
,而跳过按钮点击隐藏pnl2
并使用方法显示pnl1.setvisible(false);
pbl2.setVisible(true);
{{1}}
答案 2 :(得分:0)
我认为这将需要基本的线程,
根本不是真的。
你说你希望你的节目等待。&#34;这个词对Swing应用程序实际上并不重要。 Swing应用程序是事件驱动的。也就是说,您的程序主要由Swing的顶级循环(又称事件调度线程或EDT)调用的事件处理程序组成,以响应发生的各种事情,如鼠标单击,键盘事件,计时器,...
在事件驱动的程序中,&#34;等到X&#34;主要是指禁用某些内容,然后在X处理程序中重新启用它。
当然,Swing程序有时会创建其他线程来处理来自GUI框架不知道的源的输入,并执行&#34; background&#34;计算。在那种情况下,&#34;等到X&#34;可能意味着要通知一些线程暂停,然后发出信号以继续在X处理程序中工作。