ANTLR:从CommonTree到有用的对象图

我今天开始使用ANTLR,我已经创建了一个基本的解析器。 解析后,我最终得到了一棵树。 对我来说,似乎这只是一堆String在树节点的树结构中放在一起。 这对我来说不是很有用。 我想要一个对象图。 澄清(这是一个例子,而不是我的真实应用):对于”5-1+6″我似乎最终得到: new String(“PLUS”) new String(“MINUS”) new String(“5”) new String(“1”) new String(“6”) 我会发现更有用的东西: new Plus( new Minus( new IntegerLiteral(5), new IntegerLiteral(1)), new IntegerLiteral(6)) 从第一个表示到另一个表示最方便的方法是什么? 在本文中 ,作者做了类似的事情: public Expression createExpr(CommonTree ast) { // … switch (ast.getType()) { case SimpleExpressionParser.INT: return new IntegerLiteral(ast.getText()) case SimpleExpressionParser.PLUS: return new Plus(createExpr((CommonTree)ast.getChild(0)), // recurse createExpr((CommonTree)ast.getChild(1))); // recurse […]

Spring Boot – 使用ResourceLoader读取文本文件

我正在尝试使用Spring资源加载器读取文本文件,如下所示: Resource resource = resourceLoader.getResource(“classpath:\\static\\Sample.txt”); 该文件位于我的Spring启动项目中: 它在eclipse中运行应用程序时工作正常,但是当我打包应用程序然后使用java -jar运行它时,我得到文件未找到exception: java.io.FileNotFoundException: class path resource [static/Sample.txt] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/C:/workspace-test/XXX/target/XXX-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static/Sample.txt 我解压缩了Sample所在的Jar文件:XXX-0.0.1-SNAPSHOT \ BOOT-INF \ classes \ static \ Sample.txt 有人能帮助我吗 ? 提前致谢!

Spring:根据配置文件注入不同的属性文件

首先,一些背景: 我目前正在开发一个项目,我在其中使用Google的AppEngine(GAE)上的Spring框架从Google的一项服务中获取一些数据。 为此,我使用了Google的OAuth工具。 为此,我需要使用特定于我的应用程序的clientSecret和clientId 。 由于这些是静态配置值,我使用Spring的 ( 链接到文档 )function将这些值插入到适当的类中。 XML配置: 课程用法: @Value(“#{googleProperties[‘google.data.api.client.id’]}”) private String clientId; 我的问题: 事实certificate, clientId和clientSecret的值对于生产(在App Engine上部署时)和开发(在我的本地机器上)需要不同。 为了解决这个问题而不需要在部署时不断更改属性文件中的值,我一直在研究Spring的配置profiles ,这些配置profiles允许我为生产和开发指定不同的属性文件。 虽然我知道Spring配置文件是如何基于文档工作的,但我不确定在这种特定情况下适当的解决方案是什么。 换句话说,我如何根据我的应用程序是在本地部署还是在GAE上注入不同的属性文件?

Spring多个@Transactional数据源

在我的服务层,我可以使用@Transactional(name=”transactionManager2″); 如果我有多个事务管理器,以确定我使用哪个事务管理器?

多维数组的Java序列化

是否可以在java中序列化制作2D数组? 如果没有,我希望将3×3 2Darrays“转换”为矢量矢量。 我一直在玩矢量,我仍然不确定如何表示。 谁能帮我? 谢谢!

一些运行/ JIT的故障后Java循环变慢了?

所以我想对一些基本的javafunction进行基准测试,以便为这个问题添加一些信息: 将方法声明为静态会带来什么好处 。 我知道写作基准有时并不容易,但这里发生的事情我无法解释。 请注意,我并没有考虑如何解决这个问题,而是为什么会发生这种情况* 测试类: public class TestPerformanceOfStaticVsDynamicCalls { private static final long RUNS = 1_000_000_000L; public static void main( String [] args ){ new TestPerformanceOfStaticVsDynamicCalls().run(); } private void run(){ long r=0; long start, end; for( int loop = 0; loop<10; loop++ ){ // Benchmark start = System.currentTimeMillis(); for( long i = 0; i […]

从javascript,JSP或Java运行Phantomjs

嗨,我是phantomjs的新手, 我已使用命令生成HTML到PDF。 但我想通过单击页面上的按钮生成PDF。 并通过某种方式调用phantomjs来生成我的给定URL到pdf。 您还可以建议使用图表和图像生成生成PDF格式的API,并且可以轻松地与JSP和Servlet集成。

在Java中没有内存问题的缩略图加载大图像?

我试图让用户从他们的硬盘加载图像,并在GUI中以视觉forms呈现这些缩略图列表(带有添加到JList的图标的JPanel)。 我目前正在使用ImageIO.read()来获取BufferedImage并为每个图像使用getScaledInstance(听说你不应该使用它)。 它适用于小图像,但加载超过四张照片(5000×3000或其他一些),我得到“java.lang.OutOfMemoryError:Java堆空间”。 不保存对全尺寸BufferedImage的引用,所以我认为垃圾收集器会处理它并且只保留缩放图像(不应该占用太多内存),但它看起来不像。 我也踩了getRuntime()。gc()和System.gc(),没有效果。 从文件加载缩放图像的任何好方法,而不会遇到内存错误? 显然很多软件都设法做到这一点,但也许不是用Java做的。 外部库是可以的。 当前代码: BufferedImage unscaledImage = ImageIO.read(imageFile); int unscaledHeight = unscaledImage.getHeight(); int unscaledWidth = unscaledImage.getWidth(); int imageRatio = unscaledHeight/unscaledWidth; if (imageRatio >= 1) { return new ImageIcon(unscaledImage.getScaledInstance(width,-1,Image.SCALE_FAST)); } else { return new ImageIcon(unscaledImage.getScaledInstance(-1,height,Image.SCALE_FAST)); }

Java中的布尔表达式评估顺序?

假设我有以下表达式 String myString = getStringFromSomeExternalSource(); if (myString != null && myString.trim().length() != 0) { … } Eclipse警告我,在布尔表达式的第二个短语中myString可能为null。 但是,我知道有些编译器会在第一个条件失败时完全退出布尔表达式。 这对Java来说是真的吗? 或者评估顺序无法保证?

Java Scanner字符串输入

我正在编写一个使用Event类的程序,其中包含一个日历实例和一个String类型的描述。 创建事件的方法使用扫描程序来获取月,日,年,小时,分钟和描述。 我遇到的问题是Scanner.next()方法只返回空格前的第一个单词。 因此,如果输入是“我的生日”,则该事件实例的描述仅为“我的”。 我做了一些研究,发现人们使用Scanner.nextLine()来解决这个问题,但是当我尝试这个时,它只是跳过输入应该去的地方。 以下是我的代码的一部分: System.out.print(“Please enter the event description: “); String input = scan.nextLine(); e.setDescription(input); System.out.println(“Event description” + e.description); e.time.set(year, month-1, day, hour, min); addEvent(e); System.out.println(“Event: “+ e.time.getTime()); 这是我得到的输出: Please enter the event description: Event description Event: Thu Mar 22 11:11:48 EDT 2012 它跳过空格以输入描述字符串,因此,描述(最初设置为空格 – “”)永远不会更改。 我怎样才能解决这个问题?