SwingWorker:如何将 process() 方法的值委托给另一个 class
SwingWorker: How to delegate values from the process() method to another class
在我的程序中,我有一个 swingworker,这样用户就可以在程序本身仍然处于 运行 时访问 GUI。
有没有办法 return 我在 process()
方法中声明的值到另一个 class?我问的原因如下:
GUI 显示图表等内容,如果用户按下按钮,图表应该会更新。在 doInBackground()
方法中,ArrayList 是永久更新的。在这个 ArrayList 中是图表应该显示的值,所以每次用户按下按钮时,图表应该显示实际在 Array List
中的值
代码如下
protected Void doInBackground()
{
SaveList savelist = new SaveList();
while(true)
{
try
{
savelist.updateSaveList();
publish((SaveList) savelist);
Thread.sleep(100);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
protected void process(SaveList savelist)
{
this.savelistsize = savelist.saveListSize();
this.trueLabeled = savelist.trueLabeled();
this.falseLabeled = savelist.falseLabeled();
this.trueLabeledPercent = savelist.trueLabeled()/savelist.saveListSize();
this.falseLabeledPercent = savelist.falseLabeled()/savelist.saveListSize();
}`
如果我没理解错的话,您想将 process()
中完成的一些逻辑委托给另一个 class。在这种情况下,创建 SwingWorker
的命名子 class 并使用委托实例对其进行初始化。
示例:
public class MySwingWorker extends SwingWorker<Void, X> { // X - I don't know the type of SaveList elements
private MyDelegate delegate;
public MySwingWorker(MyDelegate delegate) {
this.delegate = delegate;
}
protected Void doInBackground() { ... }
protected void process(SaveList savelist) {
delegate.doSomethingWith(savelist);
}
}
然后您可以在 MyDelegate.doSomethingWith(SaveList)
中实现您的逻辑
在我的程序中,我有一个 swingworker,这样用户就可以在程序本身仍然处于 运行 时访问 GUI。
有没有办法 return 我在 process()
方法中声明的值到另一个 class?我问的原因如下:
GUI 显示图表等内容,如果用户按下按钮,图表应该会更新。在 doInBackground()
方法中,ArrayList 是永久更新的。在这个 ArrayList 中是图表应该显示的值,所以每次用户按下按钮时,图表应该显示实际在 Array List
代码如下
protected Void doInBackground()
{
SaveList savelist = new SaveList();
while(true)
{
try
{
savelist.updateSaveList();
publish((SaveList) savelist);
Thread.sleep(100);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
protected void process(SaveList savelist)
{
this.savelistsize = savelist.saveListSize();
this.trueLabeled = savelist.trueLabeled();
this.falseLabeled = savelist.falseLabeled();
this.trueLabeledPercent = savelist.trueLabeled()/savelist.saveListSize();
this.falseLabeledPercent = savelist.falseLabeled()/savelist.saveListSize();
}`
如果我没理解错的话,您想将 process()
中完成的一些逻辑委托给另一个 class。在这种情况下,创建 SwingWorker
的命名子 class 并使用委托实例对其进行初始化。
示例:
public class MySwingWorker extends SwingWorker<Void, X> { // X - I don't know the type of SaveList elements
private MyDelegate delegate;
public MySwingWorker(MyDelegate delegate) {
this.delegate = delegate;
}
protected Void doInBackground() { ... }
protected void process(SaveList savelist) {
delegate.doSomethingWith(savelist);
}
}
然后您可以在 MyDelegate.doSomethingWith(SaveList)