JAVA运行时解释;添加插件的策略

JAVA运行时解释;添加插件的策略,java,interpreter,extensible,Java,Interpreter,Extensible,我开始着手我的第一个大项目。这将是一个非常类似的程序。这将是一个程序,用于学习外语,用Java编写,使用Swing。在我的程序中,我计划让用户能够选择下载的课程进行学习。我将能够创建一个英语课程,因为我是一个母语为英语的人。但是,我希望说其他语言的人也能编写供用户使用的课程(这是我的程序工作的一个重要部分) 因为我希望用户能够下载他们想要的语言课程,所以将其硬编码到程序中是不可能的。课程需要在运行时进行解释。此外,由于我希望其他人与我的工作合作(即制作课程),我需要让他们很容易做到这一点 这样做

我开始着手我的第一个大项目。这将是一个非常类似的程序。这将是一个程序,用于学习外语,用Java编写,使用Swing。在我的程序中,我计划让用户能够选择下载的课程进行学习。我将能够创建一个英语课程,因为我是一个母语为英语的人。但是,我希望说其他语言的人也能编写供用户使用的课程(这是我的程序工作的一个重要部分)

因为我希望用户能够下载他们想要的语言课程,所以将其硬编码到程序中是不可能的。课程需要在运行时进行解释。此外,由于我希望其他人与我的工作合作(即制作课程),我需要让他们很容易做到这一点

这样做的最佳方式是什么

我提出的想法是用一个简单的xml文件(详细说明要使用的文本和声音)创建一个严格的空课程大纲(硬编码)。这样做的缺点是它极大地限制了作者。不同的语言可能需要从学习不同的部分开始

对于手头的问题以及整个项目的任何建议都将不胜感激。我们也非常感谢与任何相关资源或信息的任何链接

感谢你的时间和努力


Joseph Pond

简单地说,您的程序应该基于Eclipse RCP或Netbeans平台等系统。这两个系统都已经解决了这个问题,并且都完全可以胜任这项任务。它们不仅仅是为IDE设计的

这是一个更大的第一步,因为除了简单的Swing,您还需要学习其中一个平台

但是,他们解决了问题,他们的整体组织和技术将很好地服务于您的计划


不要重新发明这个轮子,只要学习其中一个就可以了。

如果你是从头开始做这件事的(威尔的想法不错),我要做的是首先确定最容易创建语言课程的文件格式。它可以是XML、纯文本或您自己提出的其他格式

您可能需要在语言格式上有一些灵活性,因为您希望能够实际指定问题和答案之类的内容。XML是一种痛苦,因为它有很多额外的终止符,但它提供了大量的元数据。如果你喜欢XML,你可以考虑在YML中定义你的语言文件,它给你XML数据,但是使用空格标记代替角括号。 您可能还希望用创建文件时使用的语言定义文件,因此您可能希望也可能不希望要求使用英语单词作为键。如果您不需要任何英语,您可能需要跳过XML和YML,并提出自己的文件格式——可能是布局和/或特殊符号定义流程和“功能”的地方

一旦定义了文件格式,就不必担心硬编码了。。。您将无法执行此操作,因为它已在文件中

插件功能也会很好。。。在这里,您的定义文件还包含一些信息,这些信息告诉您要实例化(反射式地)并使用哪个类来解析/显示数据。这样,您就可以通过交付一个新的jar文件来添加新类型的问题


如果这让人困惑,对不起,这在单向论坛中是很困难的,因为我不能看着你的脸,看你是否在跟随我,或者我是否在正确的方向上。如果你认为我在正确的轨道上,并且想要更多的细节(我以前做过一些事情),请在评论中留下一个后续的问题(或者电子邮件地址),我很乐意和你进一步讨论。

< P>如果我这样做的话,我会认真考虑使用Eclipse EMF来建模定义课程的“语言”。EMF一开始就让人望而生畏,但它提供了:

  • 可以以多种方式输入/编辑的高级模型
  • 将“实例”(即课程)序列化为XML的自动机制。(如果您愿意,还可以修改序列化。)
  • 为实例的内存表示自动生成Java类。这些API提供了针对您的模型进行调优的API,这是一种与Java反射等效的通用API。。。但是基于EMF模型类而不是Java类
  • 为“实例”自动生成的树编辑器
  • 钩子用于实现您自己的约束/验证规则,以说明什么是有效的“课程”
相关Eclipse插件提供:

  • 通过生成解析器/分析器映射到基于文本的语言
  • 映射到图形语言;e、 g.使用方框/箭头/等的符号
  • 各种更高级的持久性机制
  • 比较/差异、模型到模型的转换、OCL中的约束等

我已经在几个大型项目中使用了EMF,而让我继续关注的主要问题是模型演化的简易性。。。与以较低的抽象级别构建所有内容相比。如果我的模型(语言)需要扩展/更改,我可以使用EMF模型编辑器进行必要的更改,重新生成代码,扩展我的自定义代码以使用扩展完成正确的工作,我已经完成了(存储实例的模转换)。

+1个有趣的主题。你能试着让大家更清楚地知道这个问题是什么吗。是关于……的策略吗。。添加插件?。。你能强调一点编程问题吗?我想在做这件事的时候尝试制作我自己的文件格式,因为我确实希望这更像是一次学习经历。如果你愿意再深入一点,我将不胜感激。我的电子邮件是Joseph dot M