0

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

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

  • 通过 max.java.config.txt 包括我的(maven)目标/类目录。
  • 通过 Options > File Preferences 添加目录
  • 将 jar 添加到自动生成的 (OSX) ~/Documents/Max 7/Max for Live Devices/ MyProject Project/ 目录

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

但是,当我冻结设备以进行发布时,这些路径中的任何一个都不包含 java 文件。

我试图理解 https://docs.cycling74.com/max7/tutorials/jitterchapter99_appendixd虽然我不是在构建一个独立的,而是一个冻结的maxforlive 设备,所以我在项目文件夹中包含了 max.jar 和 mxj.mxo这也不起作用。

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

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

4

2 回答 2

1

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

您需要做的就是:

  • 在你的补丁程序中有工作的 mxj 对象(不管你保存在哪里)
  • 单击悬停时底部显示“显示包含项目”的按钮
  • 添加你的类文件
  • 冻结

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

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

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

实现这一目标的方法:

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

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

有趣的事实:你也可以覆盖类的方法。去啊

    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 进行转换。

于 2016-09-20T16:01:12.057 回答
1

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

这是 2012 年的一部电影,我在其中复制了此内容,此后一直没有修复。http://arttech.nl/projectjavaissue.mov

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

于 2016-09-16T15:07:19.413 回答