我看到很多eclipse插件API IProgressMonitor作为其参数之一.
void setRawClasspath(IClasspathEntry[] entries, IProgressMonitor monitor)
throws JavaModelException;
Run Code Online (Sandbox Code Playgroud)
null给它可以吗?或者我是否必须创建并传递一个对象(new ProgressMonitor())?我有一个ProgressMonitor pm和一个SwingWorker sw.我想取消的SwingWorker当我按cancel上-按钮pm.我想这不应该太难,我读了一些关于SwingWorker和ProgressMonitor的教程,但我无法让它工作.
final ProgressMonitor pm = new ProgressMonitor(frame, "checking", "...", 0, 100);
final SwingWorker sw = new SwingWorker()
{
protected Object doInBackground() throws Exception
{
doSomethingAndUpdateProgress();
}
};
sw.addPropertyChangeListener(new PropertyChangeListener()
{
public void propertyChange(PropertyChangeEvent evt)
{
if(evt.getPropertyName().equals("progress"))
{
updateProgress();
}
if(pm.isCanceled())
{
cancelAction();
}
if(pm.isDone())
{
doneAction();
}
}
});
sw.execute();
Run Code Online (Sandbox Code Playgroud)
进度更新工作正常,但pm.isCanceled()永远不会true.我想我需要一个用于ProgressMonitor的propertyChangeListener,但我不知道如何在那里添加一个.
ProgressMonitor有两个构造函数:
public ProgressMonitor(Component parentComponent,
Object message,
String note,
int min,
int max) {
this(parentComponent, message, note, min, max, null);
}
private ProgressMonitor(Component parentComponent,
Object message,
String note,
int min,
int max,
ProgressMonitor group) {
this.min = min;
this.max = max;
this.parentComponent = parentComponent;
cancelOption = new Object[1];
cancelOption[0] = UIManager.getString("OptionPane.cancelButtonText");
this.message = message;
this.note = note;
if (group != null) {
root = (group.root != null) ? group.root : group;
T0 = root.T0;
dialog = root.dialog;
}
else { …Run Code Online (Sandbox Code Playgroud) 对于调度和加入另一个Eclipse作业的Eclipse作业使用进度监视器的正确方法是什么?我希望子任务与主要任务相关联.
理想情况下,我希望能够告诉子任务使用SubProgressMonitor主监视器创建的子任务,但是我没有看到这样做的方法.我查看了该Job.setProgressGroup(..., ...)方法,但文档指出应该使用该组创建该组IJobManager.createProgressGroup().
这是上下文的代码片段:
@Override
protected IStatus run(final IProgressMonitor monitor) {
try {
monitor.beginTask("My Job A", 100);
MyJobB subtask = new MyJobB();
// how how should subtask's progress be tracked?
subtask.schedule();
subtask.join();
return Status.OK_STATUS;
} catch (Exception ex) {
// return error status
} finally {
monitor.done();
}
}
Run Code Online (Sandbox Code Playgroud) 我知道我必须遗漏一些非常明显的东西,但每当我在复制文件时尝试使用ProgressMonitorInputStream时,我都不会得到ProgressDialog弹出窗口.
我看到的示例除了将它们的输入流包装在ProgressMonitorInputStream中之外似乎没什么用处.
文档说:
这将创建一个进度监视器来监视读取输入流的进度.如果需要一段时间,将弹出ProgressDialog以通知用户.如果用户点击取消按钮,则下次读取时将抛出InterruptedIOException.在关闭流时完成所有正确的清理.
这是一个非常简单的例子,我把它放在一起,永远不会弹出带有大文件的对话框,即使我setMillisToPopup()是一个非常小的数字.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.ProgressMonitorInputStream;
import javax.swing.SwingWorker;
public class ProgressBarDemo extends JFrame {
private static final long serialVersionUID = 1L;
private JButton button;
ProgressBarDemo()
{
button = new JButton("Click me!");
ButtonActionListener bal = new ButtonActionListener();
button.addActionListener(bal);
this.getContentPane().add(button);
}
private class ButtonActionListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method …Run Code Online (Sandbox Code Playgroud) 我正在玩Java的ProgressMonitorInputStream来监视数据流经BufferedInputStream.这是我正在尝试的代码:
InputStream in = new BufferedInputStream(
new ProgressMonitorInputStream(
new JFrame(),"Scanning",new FileInputStream(dir.getSearchInputFile())));
Run Code Online (Sandbox Code Playgroud)
这非常合适,并弹出一个新的JFrame窗口,其中包含一个显示输入流进度的进度条.
有没有让ProgressMonitorInputstream更新另一个JFrame中存在的现有JProgressBar?
我尝试了各种方法,例如使用构造函数传递JProgressBar,或尝试在参数中指定帧.每次我尝试,我只是得到一个新的JFrame.
我错了吗?
任何投入将不胜感激.
谢谢
我的代码如下不起作用,谁能告诉我为什么?还请更正我的代码,我是Java的新手.除此之外,我正在寻找"加载面板组件",类似ProgressMonitor但可能更具吸引力,并且动画更好.如果有人以前使用过这类东西,请建议我.
public class Main extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
ProgressMonitor pm = new ProgressMonitor(frame, "Loading...",
"waiting...",
0, 100000);
for (int i = 0 ; i < 100000 ; i ++){
pm.setProgress(i);
pm.setNote("Testing");
System.out.println(i);
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Main() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, …Run Code Online (Sandbox Code Playgroud) ProgressMonitor progressMonitor = new ProgressMonitor(frame, "", "", 0, 100);
这对我来说很好,但现在我想更改此进度监视器的标题。目前它的“进展......”。
java ×5
swing ×5
inputstream ×2
swingworker ×2
eclipse ×1
jobs ×1
jprogressbar ×1
progress ×1
progress-bar ×1
title ×1