Tag: java

在Java中的方法的最大大小?

我知道java中一个方法的最大大小是64k。 如果超过,我们将得到一个编译器警告,如“代码太大,无法编译”。 所以我们可以称这是Java的一个缺点,这个less量的内存。 我们可以增加这个尺寸限制还是真的有可能增加? 有关此方法大小的更多想法?

从类path中的任何位置加载资源

我有一个简单的Java应用程序,从当前包加载属性文件。 this.getClass().getResourceAsStream("props.properties"); 当我想要的属性文件在当前包中时,这工作正常。 不过,我想把这个应用程序打包成一个JAR,然后用一个新的属性文件来定义和覆盖我使用它的地方。 有没有办法加载类path上名为“props.properties”的第一个资源? 我希望它通过命令行轻松覆盖属性文件: java.exe -classpath props.properties;myJar.jar com.test.MyApp 我不想打开JAR文件并修改属性文件来改变一些东西。 我觉得我失去了一些明显的东西…

我怎样才能读取一个HttpServletReponses输出stream?

我想创build一个Servletfilter,它将在处理完成之后读取Response的内容,并以XML或PDF或其他方式返回该信息。 但是我不确定如何从HttpServletResponse对象中获取任何信息。 我怎样才能得到这些信息?

Java ProcessBuilder:结果进程挂起

我一直在尝试使用Java的ProcessBuilder在Linux中启动应该“长期”运行的应用程序。 这个程序运行的方式是启动一个命令(在这种情况下,我启动一个媒体播放应用程序),让它运行,并检查,以确保它没有崩溃。 例如,检查PID是否仍然有效,然后重新启动进程,如果它已经死了。 我现在得到的问题是,PID在系统中保持活动状态,但应用程序的GUI挂起。 我尝试将ProcessBuilder(cmd).start()转换为一个单独的线程,但似乎没有解决任何问题,正如我所希望的那样。 基本上,对于用户来说,程序APPEARS已经崩溃,但是杀死驱动ProcessBuilder.start()进程的Java进程实际上允许创build的进程恢复其正常行为。 这意味着Java应用程序中的某些内容正在干扰生成的进程,但我完全不知道在这一点上是什么。 (因此,为什么我试图把它分成另一个线程,这似乎没有解决任何问题) 如果有人有任何意见或build议,请让我知道,因为我不能为了我的生活而想到如何解决这个问题。 编辑:我不关心从stream程创build的I / Ostream,因此没有采取任何措施来处理 – 这可能会导致stream程本身的挂起?

如何在运行时获得Java应用程序的真正path?

我正在使用log4j创build一个Java应用程序。 我给出了configurationlog4j文件的绝对path以及生成的日志文件(生成此日志文件的位置)的绝对path。 我可以在运行时通过以下方式获得Java Web应用程序的绝对path: String prefix = getServletContext().getRealPath("/"); 但是在普通的Java应用程序的上下文中,我们可以使用什么?

jackson:如何添加自定义属性到JSON而不修改POJO

我正在为我的应用程序开发一个REST接口,使用Jackson将我的POJO域对象序列化为JSON表示。 我想为某些types定制序列化,以便为POJO中不存在的JSON表示添加附加属性(例如,添加一些元数据,引用数据等)。 我知道如何编写我自己的JsonSerializer ,但在这种情况下,我需要显式调用JsonGenerator.writeXXX(..)方法为我的对象的每个属性,而我所需要的只是添加一个额外的属性。 换句话说,我希望能够写下如下内容: @Override public void serialize(TaxonomyNode value, JsonGenerator jgen, SerializerProvider provider) { jgen.writeStartObject(); jgen.writeAllFields(value); // <– The method I'd like to have jgen.writeObjectField("my_extra_field", "some data"); jgen.writeEndObject(); } 或者(甚至更好)以某种方式拦截jgen.writeEndObject()调用之前的序列化,例如: @Override void beforeEndObject(….) { jgen.writeObjectField("my_extra_field", "some data"); } 我想我可以扩展BeanSerializer并覆盖它的serialize(..)方法,但它被宣布是final ,我也找不到一个简单的方法来创build一个BeanSerializer的新实例,而不提供所有的types元数据细节实际上重复一个很好的部分jackson。 所以我放弃了这样做。 我的问题是 – 如何自定义Jackson的序列化,为特定的POJO添加额外的东西到JSON输出中,而不会引入太多的样板代码,并尽可能重复使用默认的Jackson行为。

在jar中更新.class文件

我想用一个新的jar文件更新jar文件。 什么是最简单的方法来做,特别是在Eclipse IDE中?

eclipse:一次运行多个启动configuration

我在Eclipse中有几个启动configuration每个启动相同的Java程序,但具有不同的参数。 现在是可以一次运行所有这些(只需点击一下鼠标),而不是分别select它们并启动它们?

如何找出是否启用“debugging模式”

Java程序如何发现它是否在debugging模式下运行? 在“全速”模式下,应用程序应该与“debugging模式”(当连接debugging器时,在debugging模式下运行时)有所不同。 应用程序通过TCP与其他计算机,另一个进程或其内部进行通信。 我的同事希望我们默认使用Socket.setSoTimeout(1000) ,以便从套接字读取最多可以阻塞1秒。 当debugging时,这当然是不够的,应用程序停止工作,因为它应该。 所以一个解决scheme是将SO_TIMEOUT更高,但只是在debugging模式下(例如:无限制)。 现在,我不总是设置断点,或者不想使用debugging版本,我可以自己设置“debugging”属性。 有时我附加debugging器(远程debugging)。 我主要使用Eclipse,所以只有在那里工作的解决scheme是好的。 可能的答案包括: 要查明是否以debugging模式运行,请在java.lang.management.*或javax.management.*使用以下方法… 你的同事是错误的原因X,你不应该默认设置SO_TIMEOUT 1秒。 更新 我知道系统属性的方法,但我留下了问题,以解决我原来的问题。

在Java中,当我调用OutputStream.close()时是否总是需要先调用OutputStream.flush()?

如果我只是在输出stream中调用close() ,输出是有保证的,或者需要我总是调用flush() 。