我正在用JavaFX 2.2编写一个多线程分形绘图程序,现在我需要一些指导.
我想要实现的是创建一个任务或服务(还没有决定)然后启动一些实际进行计算的其他任务,并在准备好时返回整个图像的部分.当所有部分都返回到启动任务时,它将这些部分放在一起并将其返回到主线程,以便可以看到它.
显然,所有这一切必须在没有阻止UI的情况下发生.
问题是我无法弄清楚这些任务如何相互通信.例如,我需要根据其中任务的平均进度(或类似的东西)更新启动任务的progress属性,因此它们的进度属性应该以某种方式绑定到启动任务的progress属性.图像块应放在列表或某个容器中,并在所有图像可用时重新绘制在单独的图像上.
我已经编写了一个更简单(虽然仍然是实验性的)该程序版本,它只创建了一个计算整个分形的任务.进度绑定到GUI的progressBar.在任务成功时,返回值由EventHandler处理.
我不是要求一个完整的解决方案,但一些想法可能只是一些示例代码将真正帮助我.
这是应该修改的类:
package fractal;
import fractalUtil.DefaultPalette;
import fractalUtil.PaletteInterface;
import javafx.concurrent.Task;
import javafx.scene.image.WritableImage;
import javafx.scene.paint.Color;
import org.apache.commons.math3.complex.Complex;
/**
*
* @author athelionas
*/
public abstract class AbstractFractal extends Task implements FractalInterface {
private PaletteInterface palette;
protected final int width, height, order, iterations;
protected final double scale, xReal, xIm, xCenter, yCenter, zoom;
protected final boolean julia;
protected AbstractFractal(final int width, final int height, final double xReal, final double xIm, final double xCenter, final double yCenter, final …Run Code Online (Sandbox Code Playgroud) 我一直在做一项任务,现在我被困在破坏者身上.我必须创建一个包含所有常用成员函数和一些特殊运算符的通用二叉树.还有一个限制:一切都必须迭代地工作,所以这次没有讨厌的递归黑客.
BinTreeNode类的析构函数显然有些问题,因为如果我删除这样的节点:
BinTreeNode<int> * node = new BinTreeNode<int>();
delete node;
Run Code Online (Sandbox Code Playgroud)
我仍然可以访问它的数据:
node->getData(); //should fail miserably
Run Code Online (Sandbox Code Playgroud)
所以删除没有效果,但我不知道如何纠正析构函数.在我看来,算法应该是正确的,所以我怀疑我如何使用指针有问题,但在这一点上我很困惑,我甚至不理解我自己的代码.
我有这个代码:
BinTree.h
#ifndef BINTREE_H_
#define BINTREE_H_
#ifndef NULL
#define NULL 0
#endif
#include "BinTreeNode.h"
template <class T>
class BinTree
{
private:
BinTreeNode<T> * root;
public:
//constructors and destructor
BinTree():
root(NULL){}
BinTree(T data):
root(new BinTreeNode<T>(data)){}
~BinTree();
//search
BinTreeNode<T> * search(T data);
//insert
bool insert(T data);
//remove
bool remove(T data);
};
template <class T>
BinTree<T>::~BinTree()
{
delete root;
}
template <class T>
BinTreeNode<T> * BinTree<T>::search(T data) …Run Code Online (Sandbox Code Playgroud)