Processing 处理语言如何在内部工作?

Processing 处理语言如何在内部工作?,processing,data-visualization,Processing,Data Visualization,注意:我正在Eclipse上使用processing jarcore.jar 事实上,我想让用户上传的位置文件,其中有城市名称连同locationlat和长坐标在每一行。locFileSelected是一种回调方法,一旦用户选择了文件,就会调用该方法 从上面的回调方法,控件转到另一个类的DrawOnCanvas方法readLocFileAndDraw,该方法执行IO并从中创建Hashmap。此地图用于迭代和绘制每个城市的点 为了确保这一点,我在设置方法中画了一个圆圈,效果非常好。在讲解DrawO

注意:我正在Eclipse上使用processing jarcore.jar

事实上,我想让用户上传的位置文件,其中有城市名称连同locationlat和长坐标在每一行。locFileSelected是一种回调方法,一旦用户选择了文件,就会调用该方法

从上面的回调方法,控件转到另一个类的DrawOnCanvas方法readLocFileAndDraw,该方法执行IO并从中创建Hashmap。此地图用于迭代和绘制每个城市的点

为了确保这一点,我在设置方法中画了一个圆圈,效果非常好。在讲解DrawOnCanvas课程后,我将解释我为什么使用sleep

导入java.io.File; 导入处理.core.PApplet; 公共类测试处理扩展了PApplet{ 字符串文件路径; 公共静态无效字符串[]args{ //处理语言的Applet PApplet.maintesting加工; } 公共空间设置{ 尺寸800900; } 公共空间设置{ 背景255; //只是一个样本椭圆,它是正确绘制的。 冲程0; 填充0; Ellipse500500,25,25; 选择输入为以下位置选择文件:,locFileSelected; //这会将控件发送到所选的回调方法 试一试{ Thread.sleep10000;//10秒 }捕捉中断异常e{ e、 打印跟踪; } System.out.PrintLIn设置; } public void locFileSelectedFile locFile{ //我在这里也画不出任何东西,我试过了 locFilePath=locFile.toString; DrawOnCanvas draw=新DrawOnCanvathis,locFilePath; draw.readLocFileAndDraw; System.out.printlin回调; } } 下面这个文件没有IO,我想在这个文件中为每个城市画点。在这个类的构造函数中,我传递了文件路径,以便可以分别执行IO。在ReadLocalFileandDraw中,为了演示,我没有做IO,也没有创建映射。相反,我只是硬编码了一个椭圆

导入处理.core.PApplet; 公共类DrawOnCanvas{ 丘疹亲本; 字符串文件路径; DrawOnCanvas{} DrawOnCanvaspaplet p,字符串locFilePath{ 父母=p; this.locFilePath=locFilePath; } /** *读取位置文件并将其存储在地图中 *@param locationsMap-位置文件中每个城市位置的哈希图 */ public void readLocFileAndDraw{ //实际上,我在这里创建映射是通过执行JavaIO来读取文件的 //我迭代每一行并放入一个映射,这样对于每个条目,我可以 //在画布上画一个点 parent.stroke0; parent.0; 父类。Ellipse200200,15,10; //实际上,我并没有阅读地图上的内容,而是将所有内容硬编码。 } } 现在,在调试时,我注意到,一旦用户得到浏览文件的提示,setup方法的控件就会消失。例如,在没有睡眠的情况下,打印语句的顺序是

在安装程序中,首先打印此内容,然后用户得到提示 在回调中,这是在用户选择位置文件后打印的 主要是readLocFileAndDraw的椭圆永远不会被画出来

现在,我已经在setup方法中加入了sleep,这样控件就可以保持在那个里,现在代码流就可以运行了

用户得到提示,他选择文件 在回调中打印 完成10秒的总睡眠,然后在设置中连同readLocFileAndDraw:中定义的椭圆一起打印。
如果我超过了睡眠时间,那么它的工作原理与第一例没有睡眠的情况完全相同,内部发生了什么?我可以感觉到一些线程正在被调度,但是如何控制它呢?还有其他办法吗?谢谢。

首先,在不同的类中使用回调函数似乎有点奇怪。它可能会起作用,但它带来了很多奇怪之处:如果有两个类具有readLocFileAndDraw函数呢?因此,我建议的第一件事是简化您的设计,并在TestingProcessing类中直接使用回调函数

其次,使用无参数DrawOnCanvas构造函数似乎也很奇怪。在这种情况下,parent的值将为null,这将在您尝试使用它时导致NullPointerException。过程是在幕后使用反射,所以你必须非常小心这类事情

最后,您可以尝试的另一件事是在回调函数中设置一些变量,并在draw函数中使用这些变量。大概是这样的:

float x = 0;
float y = 0;

void setup() {
    selectInput("Select a file.", "fileSelected");
}

void draw(){
   background(64);
   ellipse(x, y, 20, 20);
}

void fileSelected(){
   x = 50;
   y = 50;
}

请查看我的编辑,以了解如何正确设置降价文本的格式。谢谢您的详细反馈,先生。我之前只是在同一个文件中做的,但我也不能在画布上画任何东西。我现在只使用一个类更改了代码,但仍然存在相同的问题。我必须把睡眠设置好,让它像以前一样工作。我没有画的原因是因为我只想在画布上画一次城市。当我做了一些
画中的东西,然后它被一遍又一遍地叫。我应该分享我的新代码吗?有没有其他方法与你分享?如果需要,我可以编辑我的问题并将新代码放在这里。@JeetendraAhuja您可以调用noLoop函数来阻止draw函数被重复调用。但通常情况下,这并不是一个问题。您想共享什么代码?如果您有后续问题,请在其自己的问题帖子中发布更新。我将根据您的建议尝试更多内容,并在需要时发布最小、完整和可验证的示例。谢谢:先生,我可以在draw方法中完成它,在它的末尾添加一些条件,这样我就可以相应地执行noLoop。但是,我仍然不明白为什么我必须给睡眠设置方法使它工作。非常感谢:就像我说的,如果你有后续问题,请在新的问题帖子中发布更新的问题。看看我的示例代码。它不需要睡眠设置就可以工作。