我已经构建了这3个应用程序。它们每个都从用户输入中收集数据,并创建一个csv文件。其中2个依靠LEAP运动控制器。我正试图找到一种方法,将它们结合到一个程序中。关于我该怎么做,有什么建议吗?我能把它们像类一样封装起来,然后让主程序单独调用每一个吗?或者我需要重新编写所有内容才能一起工作?每个应用程序对draw()和所有类型的标志的使用都非常不同,noLoop()和Loop()调用会根据需要暂停以收集数据,因此很难将all as 1重写。此外,目前的代码形式非常草率。我基本上是通过黑客攻击,把随机的部分整合在一起,让每个部分都做我需要做的事情。每一个都是一团糟,所以将所有内容整合到一个程序中似乎会是一场真正的噩梦。
是否有任何方法来包装它们,使一端自动打开另一端?有点像在一个网页中,你可以在一个页面关闭后链接或自动打开另一个页面?每个应用程序只需要运行一次,这样我就不必担心来回。
最终,我将构建一个可视化系统,用这些应用程序中的数据实时更新。我想我可以为这一部分构建一个web应用程序,因为我希望能够从多个位置/平台查看可视化。
我已经包括了所有代码的dropbox链接。有人建议使用Swing接口将应用程序直接嵌入Java。现在我在读这篇文章,我想这是在解释如何做这件事。我以前从未使用过Java Swing,所以我现在迷路了。。。。
参考链接
看看http://www.onar3d.com/mother/
这是一个VJ库,将一堆小草图组合成一个性能。你必须在每个草图中添加一些代码,以便让它们对话,你需要写一个简短的草图来排列草图的顺序。
所有的应用程序都将在一个处理草图中运行,所以你不会让一个应用程序和窗口关闭,然后打开下一个,这将是一个无缝的体验。如果这不太可取,那么@krowe的解决方案简单可靠。
简单的解决方案:只需制作一个批处理文件,并为每个应用程序添加一行。让一个人等待下一个电话,就像这样:
START /WAIT MyApp1.exe
START /WAIT MyApp2.exe
START /WAIT MyApp3.exe
在执行上有很多问题真的。。。你是只想要一个大的应用程序,还是想要它们作为不同的应用程序?你想运行三个完成的应用程序,还是想合并源代码?你也可以把它们做成图书馆。。。关于你在另一个问题中的评论(在处理中创建一个草图的多个窗口),是的,当然你可以创建另一个PApplet来存储你的应用程序。我对示例进行了一些修改以展示。
在这里,我创建了两个草图RedBG和BlueBG,如下所示:
int counter = 0;
public void setup() {
size(400, 400);
counter = 0;
}
public void draw() {
background(255, counter, counter);
fill(255-counter);
text(String.valueOf(counter), width*0.5, height*0.5, width, height);
counter++;
}
这是红色的,蓝色的有背景(计数器,计数器,255) ,它们都可以作为正确的草图使用。然后,我将这两个代码放在控制器草图的不同选项卡中,并将它们包装成如下类:
public class RedBG extends PApplet {
int counter = 0;
public void setup() {
size(400, 400);
counter = 0;
}
public void draw() {
background(255, counter, counter);
fill(255-counter);
text(String.valueOf(counter), width*0.5, height*0.5, width, height);
counter++;
}
}
然后,控制器类只是我在这里的答案的修改。这是它的代码:
import javax.swing.*;
PApplet r, b;
PFrame rf, bf;
String nextWindow = "red";
int controllerCounter = 200;
String control = "preparing...";
void setup() {
size(400, 400);
r = new RedBG();
b = new BlueBG();
frame.setTitle("controller");
fill(0);
}
void draw() {
background(255);
if (controllerCounter < 1) {
switchState();
controllerCounter = 200;
}
control = null;
control = "Launching " + nextWindow + " in: " + controllerCounter;
text(control, width*0.5, height*0.5, width, height);
controllerCounter--;
}
void switchState() {
if (nextWindow == null) {
stopApplet(b);
nextWindow = "red";
}
else if (nextWindow.equals("red")) {
startApplet(r);
nextWindow = "blue";
}
else if (nextWindow.equals("blue")) {
stopApplet(r);
startApplet(b);
nextWindow = null;
}
}
void startApplet(final PApplet p) {
if (p == null) return;
final PFrame f = new PFrame(p);
p.frame = f;
f.setTitle(p.getClass() + " window");
//this thread is only necessary if you are restarting the PApplets
Thread t = new Thread(new Runnable() {
public void run() {
p.setup();
}
});
t.run();
}
void stopApplet(PApplet p) {
if (p == null || p.frame == null) return;
p.dispose();
p.frame.dispose();
}
public class PFrame extends JFrame {
public PFrame(PApplet p) {
setSize(400, 400);
add(p);
p.init();
show();
}
}
来自草图的两个类是:
public class BlueBG extends PApplet {
int counter = 0;
public void setup() {
size(400, 400);
counter = 0;
}
public void draw() {
background(counter, counter, 255);
fill(255-counter);
text(String.valueOf(counter), width*0.5, height*0.5, width, height);
counter++;
}
}
和:
public class RedBG extends PApplet {
int counter = 0;
public void setup() {
size(400, 400);
counter = 0;
}
public void draw() {
background(255, counter, counter);
fill(255-counter);
text(String.valueOf(counter), width*0.5, height*0.5, width, height);
counter++;
}
}
简而言之,从三个草图(所有选项卡)中获取所有代码,将它们放入控制器草图中的新选项卡中,并用扩展的类PApplet包装。
不幸的是,除非修改代码,否则控制器草图中不能有三个草图的选项卡。在下面修改的示例中,蓝色窗口中只有lala1()和lala3()。lala2()在控制器窗口中。。。
public class BlueBG extends PApplet {
int counter = 0;
public void setup() {
size(400, 400);
counter = 0;
}
public void draw() {
background(counter, counter, 255);
fill(255-counter);
text(String.valueOf(counter), width*0.5, height*0.5, width, height);
counter++;
lala1();
lala2();
lala3(this);
}
public void lala1() {
fill(255, 255, 0);
ellipse(100, 100, 100, 100);
}
}
public void lala2() {
fill(255, 0, 255);
ellipse(150, 150, 100, 100);
}
public void lala3(PApplet p) {
p.fill(0, 255, 255);
p.ellipse(200, 200, 100, 100);
}
最后但并非最不重要的一点是,有时代码会在后台方法调用中抛出NullPointerException和奇怪的错误消息,如“缺少一个pushMatrix()来匹配popMatrix()”。这是由startApplet()
方法中的setup()
调用引起的,这是一个并发性问题,因此需要更深入的思考和知识。。。作为临时措施,我让它从线程调用setup()
。。。如果你不打算重复这个过程,那么整个线程就没有必要了,你也不需要每次都setup()
。!
顺便说一句,这是一个骇人听闻的解决方案。。。我的建议是把你的草图合并成一个,然后正确地做。。。
问题内容: 假设我已经编写了一个Node.js应用程序,现在我想分发它。当然,我想为用户提供方便,因此,我不希望他安装Node.js,运行然后手动键入。 我更喜欢一个可执行文件,例如Windows上的文件。 我该如何处理? 我知道这个线程,无论如何这仅与Windows有关。如何以独立于平台的方式实现这一目标?有任何想法吗?最佳做法?…? 完美的解决方案是我可以提供源文件夹的“编译器”。源文件夹在各
我有一个完全使用Android Studio开发的应用程序。我需要创建第二个应用程序,这个我想用phonegapp来完成。这两个应用程序相互关联...所以理想情况下,我想将它们合并到同一个应用程序中...合并并不意味着它们需要一起工作。我希望它们一起下载(作为同一个应用程序),并且能够在应用程序中从一个下载到另一个...所以它们可以完全是两个独立的应用程序,但用户会认为它只是一个应用程序。我希望我
本文向大家介绍将两个字典合并为一个的Python程序,包括了将两个字典合并为一个的Python程序的使用技巧和注意事项,需要的朋友参考一下 当需要将两个词典连接到一个实体中时,可以使用“更新”方法。 字典是“键值”对。 以下是相同的演示- 示例 输出结果 解释 定义了两个字典,它们显示在控制台上。 通过将第二个字典作为参数传递,在第一个字典上调用'update'方法。 这将有助于连接字典。
问题内容: 我大约。6000个PNG文件(256 * 256像素),并希望将它们组合成一个大PNG,以编程方式保存它们。 最好/最快的方法是什么? (其目的是在纸上打印,因此,不能选择使用某些网络技术,并且只有一个图片文件可以消除许多使用错误。) 我尝试了fahd的建议,但是当我尝试创建宽度为24576像素,高度为15360像素的时我得到了。有任何想法吗? 问题答案: 创建要写入的大图像。根据所需
我有一个商业案例,使用Spring batch将多个csv文件(每个文件大约1000个,包含1000条记录)合并成单个csv。 请帮助我提供方法和性能方面的指导和解决方案。 到目前为止,我已经尝试了两种方法, 方法1。 Tasklet chunk与multiResourceItemReader一起从目录中读取文件,FlatFileItemWriter作为项目编写器。 这里的问题是,它的处理速度非常
这是我的聊天应用程序文件代码 这是我的服务器。js文件 在途中。js文件 我在写这段代码 TypeError:对象#在C:\Users\Sanjay1\Desktop\fmodule\login\app\routes没有方法“worker”。js:11:7在路由器的pass(C:\Users\Sanjay1\Desktop\node_modules\express\lib\router\index