小编Phi*_*hil的帖子

更好地练习重新实例化List或调用clear()

使用Java(1.6)是否最好在List上调用clear()方法或者只是重新实例化引用?

我有一个ArrayList,其中填充了未知数量的对象并定期"刷新" - 处理对象并清除列表.刷新后,List再次填满.冲洗是在随机时间发生的.列表中的数字可能很小(对象的10个)或大的(数百万个对象).

那么"flush"调用clear()或new ArrayList()会更好吗?

是否值得担心这类问题,还是我应该让VM担心呢?我怎样才能看看Java的内存占用为我自己做这类事情?

任何帮助非常感谢.

java list clear

34
推荐指数
1
解决办法
8723
查看次数

为什么"undefined"结束了JavaScript中的循环?

我无法理解这个for循环如何在JavaScript中终止:

var files = ["A", "B"];
for (var i = 0, f; f = files[i]; i++) {
   console.log(f);
}
Run Code Online (Sandbox Code Playgroud)

运行时,它会在屏幕上显示A和B,但为什么f = files [2]结束循环?如果我f=files[2]在我的控制台中运行,我会得到"未定义"的答案,那么这应该结束循环这一事实背后的理由是什么?

奖金问题:为什么不写下循环,如下所示?

for (var i=0; i < files.length; i++) {
    f = files[i];
    console.log(f);
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎更清晰,更易于维护,所以有没有理由在第二段代码中使用第一段代码?

javascript for-loop

12
推荐指数
1
解决办法
4318
查看次数

如何在Java Web应用程序中获取服务器名称

我有一个用户在自己的Java Web服务器上部署的Web应用程序(例如Tomcat).Web应用程序的Java端需要报告Web应用程序本身的URL(例如http://aServer.com:8080/MyApphttps://blah.blahSever/MyApp).但是,由于许多用户使用端口转发和其他网络技术,因此Web应用程序通常会报告错误的名称.

我尝试了以下技术,但通常它们实际上并没有产生用户需要的东西.

注意(请求是HttpServletRequest)

request.getLocalAddr();    // Returns: 127.0.0.1
request.getLocalName();    // Returns: localhost
request.getServerName();   // Returns: localhost
request.getServerPort();   // Returns: 8080
request.getContextPath();  // Returns: /MyApp

request.getScheme();       // Returns: http

InetAddress.getLocalHost().getHostName();           // Returns: serverXXX-XXX-XXX-XX.xxxx-xxxxxxx.net
InetAddress.getLocalHost().getHostAddress();        // Returns: xxx.xxx.xxx.xxx (ip address)
InetAddress.getLocalHost().getCanonicalHostName();  // Returns: serverXXX-XXX-XXX-XX.xxxx-xxxxxxx.net
Run Code Online (Sandbox Code Playgroud)

InetAddress的使用接近我想要的,但由于我们在Apache2服务器中使用Server Aliases和ProxyPass,因此InetAddress的值是服务器的实际值而不是Alias.

我能想到的唯一技术是用户在属性文件中提供属性,Web应用程序在启动时读取该属性.如果设置了该属性,则此值用于返回完整的Web应用程序路径(例如serverUrl = https://blah.blahServer/MyApp).这种技术可行,但涉及到我的客户更多的部署工作.

有没有人对如何实现更优雅的解决方案有任何想法?

谢谢,菲尔

java web-applications

7
推荐指数
1
解决办法
2万
查看次数

Java Validator在失败时锁定文件 - 我做错了什么?

我正在尝试针对Java中的模式验证XML文件,问题是如果文件验证失败,则文件将被锁定,直到应用程序终止.如果输入文件有效,则文件不会被锁定,一切都很好.

我正在使用javax.xml.validation.Validatorvalidate()方法.这似乎很简单,并且在验证通过时很好.我只能假设我在错误处理中遗漏了一些东西,但Validator的API似乎没有提供任何有用的东西.任何人都可以阐明我在这里做错了什么吗?

我将所有这些简化为下面的独立课程.如果您在扫描仪启动时运行此操作,请检查输入文件,您可以看到它现在已被锁定.如果需要,我可以提供输入和结构文件.

谢谢,

菲尔


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.net.URI;
import java.util.Scanner;

import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

public class ValidationTest {

    public static void validate(URI xmlLocation, URI schemaLocation) throws Exception {

        SchemaFactory schemaFactory = SchemaFactory.newInstance( "http://www.w3.org/2001/XMLSchema" );

        Source schemaSource = new StreamSource(schemaLocation.toString());
        Schema schema = schemaFactory.newSchema(schemaSource);

        Validator schemaValidator = schema.newValidator();

        StreamSource source = new StreamSource(xmlLocation.getPath());
        schemaValidator.validate( source );
    }


    public static void main(String[] args) throws Exception {
        File …
Run Code Online (Sandbox Code Playgroud)

java xml validation

6
推荐指数
1
解决办法
1860
查看次数

如何使用过滤器来衡量性能?

我想知道我是否可以使用过滤器(在我的情况下是CorsFilter)来测量时间并将时间用于消息本身.我知道以下工作正常:

public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
  long startTime = System.nanoTime();
  chain.doFilter(request, response);
  long endTime = System.nanoTime();
  System.out.println("Time: " + (endTime - startTime) );
}
Run Code Online (Sandbox Code Playgroud)

当然,这会以秒为单位输出总时间.我想把时间放在返回响应的标题中,以便接收者可以查看标题并查看处理时间.以下代码不起作用:

public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
  long startTime = System.nanoTime();
  if(response instanceof HttpServletResponse) {
    HttpServletResponse httpResp = (HttpServletResponse)response;
    httpResp.addHeader("Start-time", Long.toString(startTime));
  }

  chain.doFilter(request, response);
  long endTime = System.nanoTime();
  if(response instanceof HttpServletResponse) {
    HttpServletResponse httpResp = (HttpServletResponse)response;
    httpResp.addHeader("End-time", Long.toString(endTime));
  }
}
Run Code Online (Sandbox Code Playgroud)

标头仅包括开始时间而非结束时间.我假设这是因为消息已经发送,因此修改对象将无效.

有没有人有一个优雅/聪明的解决方案,通过使用过滤器将时间放入标题?

谢谢,菲尔

更新

我已经研究过使用HttpServletResponseWrapper来解决这个问题.这仍然无法在响应头上输出XXX-EndTime或YYY-EndTime. …

java servlets timing servlet-filters

6
推荐指数
1
解决办法
1436
查看次数

以编程方式关闭AIR应用程序

我想知道以编程方式关闭AIR应用程序的正确方法.

在我的Spark WindowedApplication中,我有:

this.addEventListener( Event.CLOSING, shutdownApp );
Run Code Online (Sandbox Code Playgroud)

当然还有shutdownApp方法的实现(它基本上整理了临时文件).

这适用于窗口的右上角关闭按钮.但是我也有需要关闭应用程序的功能.在我调用的代码中:

NativeApplication.nativeApplication.exit();
Run Code Online (Sandbox Code Playgroud)

但是,这不会触发Event.CLOSING方法,因此我的临时文件不会被清除.我不应该调用nativeApplication.exit吗?如果是这样,我该怎么称呼呢?我宁愿不必在NativeApplication.exit()之前调用我的shutdownApp方法,因为这不太优雅.

任何人都可以对正确的做法有所了解吗?

谢谢,

菲尔

apache-flex air shutdown flex-spark

5
推荐指数
2
解决办法
7984
查看次数

用Java创建一个非常非常大的Map

使用Java我想创建一个可以增长和增长的Map,并且可能大于可用内存的大小.现在显然使用标准的POJO HashMap,我们将耗尽内存并且JVM将崩溃.所以我一直在想着如果它意识到内存不足,它可以将当前内容写入磁盘.

有没有人实现这样的任何东西或知道任何现有的解决方案?

我想要做的是一次读取一个非常大的ASCII文件(比如50Gb).每行包含一个键和一个值.密钥可以在文件中复制.然后,我将每一行存储在一个Map中,这是一个值列表的键.这个地图是将成长和成长的对象.

任何建议都非常感谢.

菲尔

更新:

感谢所有人的意见和建议.由于我描述的问题,数据库是正确的,可扩展的解决方案.我应该说这是一个临时Map,需要在短时间内创建和使用,以帮助解析文件.在这种情况下,迈克尔建议"仅存储行号而不是实际值"是最合适的.将迈克尔的答案标记为推荐的解决方案.

java memory map overflow

5
推荐指数
1
解决办法
3037
查看次数

Spark列表上的按钮在某些条件下无法单击ItemRenderer

我有一个带有我自己的自定义渲染器的Spark列表.当用户滚动列表中的项目时,左侧和右侧按钮出现在行中,允许用户更改正在呈现的值的值.例如,如果有5个优先级(1到5),则左按钮减小值,右按钮增加值.

快速注意:它们不是真正的按钮,而是s:图像设计像按钮一样工作.

现在这个工作正常,除了在一个特定条件下:如果用户选择行,然后将光标移出行,然后返回到行,当用户单击任一按钮时,没有任何反应.即使这种情况听起来令人费解,但测试用户仍然会这样做!这对他们来说真的很令人沮丧.

我发现了这种行为的原因:按钮仅显示在项呈示器的悬停和选定状态中.这就是我想要发生的事情 - 按钮不应该是可见的,除非用户的指针能够按下它们.在列表中选择项目时,渲染器的状态将转到选中状态.再次单击不会更改状态.将指针移出行,然后再次返回并单击(在已选择的行上)使行的状态从选定状态变为正常状态(鼠标按下时)并返回到选定状态(在鼠标按下时).我发现这很奇怪!这意味着按钮实际上在处于正常状态时(它应该)因此没有被点击而消失.

我曾经考虑过,不知何故,我可以在项目渲染器的Z顺序中将图像"更高",因此它们会在项目渲染器获取之前拦截click事件,但我无法使其工作.

有人可以帮忙吗?

如果有帮助,ItemRenderer的片段如下:

<s:HGroup width="150" verticalAlign="middle" verticalCenter="0">
  <s:Image id="previousItemButton" buttonMode="true" source="{_leftArrow}" width="16" height="16" visible.normal="false" visible.hovered="true" visible.selected="true" click="previousClicked(event)"/>
  <s:Label text="{data.outputFormat.value}" width="100%" click="nextClicked(event)"/>
  <s:Image id="nextItemButton" buttonMode="true" source="{_rightArrow}" width="16" height="16" visible.normal="false" visible.hovered="true" visible.selected="true" click="nextClicked(event)"/>
</s:HGroup>
Run Code Online (Sandbox Code Playgroud)

更新:

该问题是由构成ItemRenderer的组件的最高级别上的虚假rollOut事件引起的.这个rollOut称为一个方法,它包括:

protected function hgroup1_rollOutHandler(event:MouseEvent):void {
  if (this.selected) {
    this.selected = false;
  }
}
Run Code Online (Sandbox Code Playgroud)

这导致了问题并删除了rollOut,该方法解决了这个问题.我不知道为什么在mouseDown上激活转出的原因.

apache-flex list onclick itemrenderer

5
推荐指数
0
解决办法
1049
查看次数

如何在AWS Cloud Formation启动时以不同的用户身份运行脚本?

我在启动AWS Ubuntu实例(来自Cloud Formation模板)并在启动时成功运行脚本时遇到了很多麻烦.这个脚本确实运行,但我不希望它以root身份运行.我希望脚本可以作为不同的用户调用,也可以在脚本运行时让脚本更改用户.

由于我们正在尝试使用Cloud Formation,因此我需要将脚本或脚本的引用放在我的模板文件中.我的模板文件的相关部分如下.脚本'myScript.sh'确实运行,但始终以root身份运行.

"MyImage" : {
        "Type" : "AWS::EC2::Instance",
        "Properties" : {
           "ImageId" : "xxxxxx",
           "KeyName" : "xxxxxx",
           "SecurityGroups" : [ "xxxxxx" ],
           "UserData" : {"Fn::Base64" : {"Fn::Join" : ["", [
            "#include\n",
            "https://s3-eu-west-1.amazonaws.com/aFolder/myScript.sh \n"
            ] ] } }
        }
      }
    },
Run Code Online (Sandbox Code Playgroud)

从URL:http://alestic.com/2009/06/ec2-user-data-scripts它声明这些脚本始终以root身份运行.所以我决定修改脚本来改变用户.下面是一个不能满足我想要的示例脚本.我已经内联评论它来解释每个阶段的作用:

#!/bin/bash

whoami > /home/ubuntu/who1.txt    # Always returns 'root'
su ubuntu                         # Appears to have no effect. Ubuntu user does exist
whoami > /home/ubuntu/who2.txt    # Always returns 'root'

su ubuntu echo fish > …
Run Code Online (Sandbox Code Playgroud)

cloud bash amazon-web-services

5
推荐指数
1
解决办法
1万
查看次数

在JavaScript中0 === 4是什么意思?

我看到以下JavaScript代码并且它让我感到困惑,因为从逻辑上0永远不会是4或5:

 if (0 === 4) { // Safari
      safari.self.addEventListener("message", safariMessageListener, false);
 } else if (0 === 5) { // Opera
      opera.extension.onmessage = operaMessageListener;
 }
Run Code Online (Sandbox Code Playgroud)

我将假设此代码有效.那么程序员是否设法以某种方式重新定义0或者0不知何故不是指数字0?任何人都可以解释这个代码,为什么有人这样编码?这种技术的优点是什么?(除了让像我这样迷惑的人!)

为了完整起见,此片段来自YouTube Center Grease Monkey插件.其URL是:

https://github.com/YePpHa/YouTubeCenter/wiki/Developer-Version

而完整的方法是:

  function initListeners() {
    if (support.CustomEvent) {
      window.addEventListener("ytc-content-call", eventListener, false);
    } else {
      window.addEventListener("message", messageListener, false);
    }

    window.addEventListener("unload", windowUnload, false);

    if (0 === 4) { // Safari
      safari.self.addEventListener("message", safariMessageListener, false);
    } else if (0 === 5) { // Opera
      opera.extension.onmessage = operaMessageListener;
    }
  }
Run Code Online (Sandbox Code Playgroud)

javascript

4
推荐指数
1
解决办法
106
查看次数

显示Spark列表为空的消息

对不起,这可能是一个非常容易回答的问题,但在Flex中如何在Spark List组件中显示一条消息,指出List为空.例如,如果我有一个显示未完成作业数量的列表,如果我的列表为空,那么我希望列表中显示一条消息,指出"没有要执行的作业".

我宁愿不使用Item Renderer,因为那时它是一个Item(列表不为空)并且可以选择该项.

这似乎应该是非常微不足道的,我希望它是.

菲利,提前谢谢

apache-flex list flex4 flex-spark

3
推荐指数
1
解决办法
1750
查看次数

Maven构建一个WAR文件,但首先构建一个JAR文件

我在Eclipse中有两个Maven项目,都有自己的POM.

项目A创建一个JAR文件.

项目B创建一个WAR文件.

当我对项目B运行"package"命令时,我希望它也打包项目A,然后将生成的JAR文件复制到项目B中的任意位置.

我通过使用maven-war-plugin中的webResources值尝试(并成功)了副本,如下所示:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.0.2</version>
  <configuration>
    <webResources> 
      <resource> 
        <directory>../ProjectA/target</directory> 
        <targetPath>.</targetPath>
        <includes>
          <include>ProjectA*.jar</include>
        </includes>
        <excludes>
          <exclude>*shaded*.jar</exclude>
        </excludes>
      </resource> 
   </webResources> 
Run Code Online (Sandbox Code Playgroud)

但是,如何让项目B的POM进行项目A的构建?

我尝试的另一种方法是使项目A成为项目B的依赖项,因此它将被导入到WAR的WEB-INF/lib目录中,然后将其移动到其他位置.但这似乎有点凌乱.

任何帮助,非常感谢.

eclipse war pom.xml maven

1
推荐指数
1
解决办法
2665
查看次数