如何在冻结的 m4l 设备中包含 mxj Java jar/class 文件夹?

How can I include a mxj Java jar/class folder in a freezed m4l-Device?

我有一个使用 java/mxj 的 maxforlive 设备。

我在开发过程中使用了所有这些选项来包含我的 java 文件:

所有这些路径都工作正常,即文件被拾取并且我的 mxj 对象工作。

但是,当我冻结设备以供发布时,java 文件未包含在任何这些路径中。

我试图理解 https://docs.cycling74.com/max7/tutorials/jitterchapter99_appendixd 虽然我不是在构建 standalone,而是 freezed maxforlive 设备,所以我包括了 max.jar 和 mxj.mxo 在项目文件夹中也不起作用。

当我将 target/classes 或 target/classes/myproject 文件夹复制到生成的项目文件夹中时(/code,/code/classes,/classes), max 将所有 class 文件移出到 /code 中,为我创造了很多工作,甚至没有为开发挑选 classes。

我在 maxforlive.com 上看到设备正确包含 java 文件,所以我知道可以做到。我怎样才能做到这一点?

不幸的是,这是 MFL 中长期存在的错误。

这是我在 2012 年重现的一部电影,此后一直没有修复。 http://arttech.nl/projectjavaissue.mov

这意味着分发带有 java class 文件的 MFL 设备的唯一方法是单独包含它们。

好的,就是这样:只包含一个 class,没有其他 class 依赖关系,除了 MaxObject 工作正常。也不需要像我在之前的评论中所说的那样添加 .java 文件。

您只需:

  • 在你的修补程序中有工作的 mxj 对象(不管你把它保存在哪里)
  • 悬停时单击底部显示 "Show containing project" 的按钮
  • 添加您的class文件
  • 冻结

当你有更多 class 时,它会变得复杂。

1) 如果您有包含文件夹和子文件夹的典型 java 层次结构,那将不起作用。由于您必须单独添加每个文件,因此层次结构将被破坏。使用 jar 并将其添加到包含的项目中。

2) 不管你信不信,它来了:你将要使用的所有 classes 都必须在第一次实例化时加载。我称之为静态 class 分配 ;)

实现该目标的方法:

  • 在扩展 MaxObject 或其调用的任何其他构造函数的 class 的构造函数中为每个 class 创建一个新实例。这包括 class 只有静态方法的 es。

  • 如果您碰巧使用接口并动态创建这些接口的实现 (new Runnable() {...}),请不要这样做。动态实现是新的 classes.

有趣的事实:您也可以覆盖 classes 的方法。去吧

    class Runner {
      public void run() { throw new Exception("not implemented"); }
    }

然后你可以动态创建一个

    new Runner() {
      public void run() {
        MaxObject.post("Even Mr. Gosling says interfaces were a mistake!");
      }
    }

不信?我不怪你。看着 https://github.com/mihop/mxj-wsserverhttp://www.maxforlive.com/library/device/3809 待转换。