java – 使用长时间运行的任务结果重复更新JLabel
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用长时间运行的任务结果重复更新JLabel,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4161字,纯文字阅读大概需要6分钟。
内容图文
![java – 使用长时间运行的任务结果重复更新JLabel](/upload/InfoBanner/zyjiaocheng/716/5748829235cf413e9f16132c3fce4de0.jpg)
我正在编写一个不断ping服务器的程序.我编写了一次代码来检查它并将ping放在JLabel中并将其放在一个名为setPing()的方法中.
这是我的代码
private void formWindowOpened(java.awt.event.WindowEvent evt) {
setPing();
}
这工作但只做了一次,所以我做了:
private void formWindowOpened(java.awt.event.WindowEvent evt) {
for(;;){
setPing();
}
}
但这甚至没有第一次起作用.
我没有把setPing方法,因为它太长了所以这里是:
public String setPing(){
Runtime runtime = Runtime.getRuntime();
try{
Process process = runtime.exec("ping lol.garena.com");
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
int i = 0;
i = line.indexOf("Average");
if(i > 0){
String finalPing = "";
line.toCharArray();
try
{
finalPing = "";
for(int x = i; x < i + 17; x++)
{
finalPing = finalPing + (line.charAt(x));
}
}catch(IndexOutOfBoundsException e)
{
try
{
finalPing = "";
for(int x = i; x < i + 16; x++)
{
finalPing = finalPing + (line.charAt(x));
}
}catch(IndexOutOfBoundsException f)
{
try
{
finalPing = "";
for(int x = i; x < i + 15; x++)
{
finalPing = finalPing + (line.charAt(x));
}
}catch(IndexOutOfBoundsException g){}
}
}
String final1Ping = finalPing.replaceAll("[^0-9]", "");
return final1Ping;
}
}
}catch(IOException e){
}
return "";
}
UPDATE
为了防止这很重要,我使用netbeans.我创建了一个表单并将此代码放在formWindowOpened evt中,而不是在main中调用它:
private void formWindowOpened(java.awt.event.WindowEvent evt) {
ActionListener timerListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new PingWorker().execute();
}
};
Timer timer = new Timer(1000, timerListener);
timer.start();
jLabel1.setText(label.getText());
timer.stop();
// TODO add your handling code here:
}
class PingWorker extends SwingWorker {
int time;
@Override
protected Object doInBackground() throws Exception {
time = pingTime("lol.garena.com");
return new Integer(time);
}
@Override
protected void done() {
label.setText("" + time);
}
};
public JComponent getUI() {
return label;
}
public static int pingTime(String hostnameOrIP) {
Socket socket = null;
long start = System.currentTimeMillis();
try {
socket = new Socket(hostnameOrIP, 80);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
}
}
}
long end = System.currentTimeMillis();
return (int) (end - start);
}
解决方法:
使用Swing Timer重复任务&用于长时间运行任务的SwingWorker.例如.以下两者 – 它使用Timer在SwingWorker中重复执行“长时间运行”任务(ping).
有关事件调度??线程以及在GUI中执行长时间运行或重复任务的更多详细信息,请参阅Concurrency in Swing.
此代码使用基于Swing的计时器,使用从重复任务调用的SwingWorker(使用时间重复更新JLabel)组合长时间运行的任务(“ping”服务器).
import java.awt.event.*;
import javax.swing.*;
import java.net.Socket;
public class LabelUpdateUsingTimer {
static String hostnameOrIP = "stackoverflow.com";
int delay = 5000;
JLabel label = new JLabel("0000");
LabelUpdateUsingTimer() {
label.setFont(label.getFont().deriveFont(120f));
ActionListener timerListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new PingWorker().execute();
}
};
Timer timer = new Timer(delay, timerListener);
timer.start();
JOptionPane.showMessageDialog(
null, label, hostnameOrIP, JOptionPane.INFORMATION_MESSAGE);
timer.stop();
}
class PingWorker extends SwingWorker {
int time;
@Override
protected Object doInBackground() throws Exception {
time = pingTime();
return new Integer(time);
}
@Override
protected void done() {
label.setText("" + time);
}
};
public static int pingTime() {
Socket socket = null;
long start = System.currentTimeMillis();
try {
socket = new Socket(hostnameOrIP, 80);
} catch (Exception weTried) {
} finally {
if (socket != null) {
try {
socket.close();
} catch (Exception weTried) {}
}
}
long end = System.currentTimeMillis();
return (int) (end - start);
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
new LabelUpdateUsingTimer();
}
};
SwingUtilities.invokeLater(r);
}
}
内容总结
以上是互联网集市为您收集整理的java – 使用长时间运行的任务结果重复更新JLabel全部内容,希望文章能够帮你解决java – 使用长时间运行的任务结果重复更新JLabel所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。