当前位置: 首页 > 知识库问答 >
问题:

将处理应用程序合并为一个大的可执行文件?

毋宏茂
2023-03-14

我已经构建了这3个应用程序。它们每个都从用户输入中收集数据,并创建一个csv文件。其中2个依靠LEAP运动控制器。我正试图找到一种方法,将它们结合到一个程序中。关于我该怎么做,有什么建议吗?我能把它们像类一样封装起来,然后让主程序单独调用每一个吗?或者我需要重新编写所有内容才能一起工作?每个应用程序对draw()和所有类型的标志的使用都非常不同,noLoop()和Loop()调用会根据需要暂停以收集数据,因此很难将all as 1重写。此外,目前的代码形式非常草率。我基本上是通过黑客攻击,把随机的部分整合在一起,让每个部分都做我需要做的事情。每一个都是一团糟,所以将所有内容整合到一个程序中似乎会是一场真正的噩梦。

是否有任何方法来包装它们,使一端自动打开另一端?有点像在一个网页中,你可以在一个页面关闭后链接或自动打开另一个页面?每个应用程序只需要运行一次,这样我就不必担心来回。

最终,我将构建一个可视化系统,用这些应用程序中的数据实时更新。我想我可以为这一部分构建一个web应用程序,因为我希望能够从多个位置/平台查看可视化。

我已经包括了所有代码的dropbox链接。有人建议使用Swing接口将应用程序直接嵌入Java。现在我在读这篇文章,我想这是在解释如何做这件事。我以前从未使用过Java Swing,所以我现在迷路了。。。。

参考链接

共有3个答案

缑永年
2023-03-14

看看http://www.onar3d.com/mother/这是一个VJ库,将一堆小草图组合成一个性能。你必须在每个草图中添加一些代码,以便让它们对话,你需要写一个简短的草图来排列草图的顺序。

所有的应用程序都将在一个处理草图中运行,所以你不会让一个应用程序和窗口关闭,然后打开下一个,这将是一个无缝的体验。如果这不太可取,那么@krowe的解决方案简单可靠。

宋晋
2023-03-14

简单的解决方案:只需制作一个批处理文件,并为每个应用程序添加一行。让一个人等待下一个电话,就像这样:

START /WAIT MyApp1.exe
START /WAIT MyApp2.exe
START /WAIT MyApp3.exe
虞航
2023-03-14

在执行上有很多问题真的。。。你是只想要一个大的应用程序,还是想要它们作为不同的应用程序?你想运行三个完成的应用程序,还是想合并源代码?你也可以把它们做成图书馆。。。关于你在另一个问题中的评论(在处理中创建一个草图的多个窗口),是的,当然你可以创建另一个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