小编The*_*eLQ的帖子

用实际文件名替换Java Rhino(JSR223)中的<Unknown Source>

在我的代码中,所有脚本都包含在.js文件中.每当其中一个脚本包含错误时,我就会得到:

javax.script.ScriptException:sun.org.mozilla.javascript.internal.EcmaError:ReferenceError:未定义"nonexistant".(<未知来源>#5)在第5行的<未知来源>中

我不知道的是<Unknown Source>.多个文件在一个ScriptContext中,并且很难找到错误.它看起来也很糟糕.

有没有办法用实际文件名替换<Unknown Source>?我看到的所有方法都没有支持传递File对象,所以我真的很困惑.

java rhino jsr223

8
推荐指数
2
解决办法
2155
查看次数

如何在不将其作为上帝对象的情况下编写控制器?

在我的应用程序中,我有一个Controller由main方法启动的.控制器初始化钩子,数据库连接,UI,另一个连接和其他东西.它占据了程序的大部分状态(不,它不是Singleton).在另一个例子中,有一个用于机器人的控制器,用于处理解释和发出命令.两者都是相当大的文件.

我已经阅读了上帝的对象,但我真的不知道如何将它分开.如果我将机器人中的解释器和调度员分开,它将会形成一个可怕的调用链(类似于getBot().getParser().getOutput().sendMessage(recipient, message)).类似地,在第一个控制器中,如果我分开,你将只有包含字段的数据对象和一些别名实用程序方法.将它们拆分会让事情变得更糟.在你认为它不可维护之前,实际上并非如此.我甚至没有写Bot控制器,但我仍然知道发生了什么.

但问题是Bot类是2000行(如果我拿出Javadoc注释可能会更短)并且Bot大约是1000行.很多行=上帝的对象.但是对于项目的一个或两个核心类是否可以?

java controller god-object

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

uniqueVersion标签被maven忽略

我正在尝试做一些我认为很简单的事情:由于空间考虑,停止创建SNAPSHOT构建的唯一版本.

所以我用这个设置我的pom:

<distributionManagement>
    ...
    <!--Snapshot deploy repository-->
    <snapshotRepository>
        <id>maven-general-repo.googlecode.com</id>
        <name>General Maven Repo on Google Code</name>
        <url>dav:https://general-maven-repo.googlecode.com/svn/maven2/snapshots</url>
        <uniqueVersion>false</uniqueVersion>
    </snapshotRepository>
    ...
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)

然后简单地跑mvn clean deploy.但是构建仍然以前缀为前缀-20110305.210936-1

我在这做错了什么?我丢失了标签或开关吗?

Maven版本:3.0.3

maven-deploy-plugin版本:--- maven-deploy-plugin:2.5:deploy(default-deploy)

java maven

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

在没有循环的情况下随机获取HashMap或HashSet中的元素

我有大约420,000个元素需要存储在某种Set或List中.但是限制是我需要能够选择一个随机元素并且需要快速.

最初我使用了ArrayList和LinkedList,但是有很多元素它很慢.当我对它进行分析时,我看到equals()我存储的对象中的方法在很短的时间内被称为大约2100万次.

接下来我尝试了一个HashSet.我在性能方面获得的东西我在功能上松了一口气:我不能选择随机元素.HashSet由HashMap支持,HashMap由一组HashMap.Entry对象支持.然而,当我试图暴露它们时,我被整个Java Collections Framework的疯狂私有和包私有可见性所阻碍(即使复制和粘贴类也不起作用,JCF非常"使用我们拥有的东西或滚动你自己的东西").

随机选择存储在HashSet或HashMap中的元素的最佳方法是什么?由于集合的大小,我宁愿不使用循环.

重要编辑:我忘记了一个非常重要的细节:我究竟是如何使用Collection的.我在桌子的乞讨处填充整个收藏品.在程序中,我选择并删除一个随机元素,然后选择并删除一些更多的已知元素,然后重复.不断查找和更改是导致缓慢的原因

java collections hashmap hashset

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

在注释中支持"可扩展枚举"的最佳方法是什么?

在我的图书馆中有一个"用户级别"的概念.我提供了几个默认级别,但出于各种原因希望为用户提供使用自己级别的选项.

目前这被实现为

public interface AdminLevel {
    public void name();
}

public enum StandardAdminLevels implements AdminLevel {
    ADMIN,
    ANONYMOUS
}
Run Code Online (Sandbox Code Playgroud)

问题是用户通常会在注释中传递他们所需的用户级别.我尝试过但失败的事情:

  • 使用AdminLevel作为类型 - 失败,"注释成员的类型无效"
  • 使用String作为类型但使用StandardAdminLevels.ADMIN.name()- 设置值失败"属性值必须是常量"
  • 使StandardAdminLevels成为一个最终的类,它不会为每个级别(实际上是枚举)实现任何公共静态最终字段的任何内容 - 失败,并且"注释成员的类型无效"

有没有其他方法我想不到在注释中有可扩展的枚举?我试图坚持枚举,因为它们的清晰度和对无效值的基本保护,但我能想到的另一种方法是字符串常量.我遇到的问题是需要在每个单点使用用户级别进行验证,甚至可能在客户端代码中

有任何想法吗?

java enums annotations

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

智能JScrollPane自动滚动

我试图在包含JTextPane的JScrollPane上实现智能自动滚动.JTextPane用于以彩色记录我的应用程序.然而,我正试图进行智能自动滚动.通过智能自动滚动我并不是指每次发生变化时盲目地自动滚动,我的意思是检查你是否一直向下滚动,然后自动滚动.然而,无论我做什么,它总是自动滚动或根本不自动滚动

作为测试脚本,这里是设置(JFrame已被忽略)

final JTextPane textPane = new JTextPane();
textPane.setEditable(false);
final JScrollPane contentPane = new JScrollPane(textPane);
contentPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
Run Code Online (Sandbox Code Playgroud)

这是丑陋的自动添加测试循环

while (true)
    try {
        Thread.sleep(1000);
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    JScrollBar scrollBar = scroll;
                    boolean preCheck = ((scrollBar.getVisibleAmount() != scrollBar.getMaximum()) && (scrollBar.getValue() + scrollBar.getVisibleAmount() == scrollBar.getMaximum()));
                    System.out.println("Value: " + scroll.getValue()
                                    + " | Visible: " + scrollBar.getVisibleAmount()
                                    + " | Maximum: " + scrollBar.getMaximum()
                                    + " | Combined: " + (scrollBar.getValue() + scrollBar.getVisibleAmount())
                                    + …
Run Code Online (Sandbox Code Playgroud)

java swing jscrollpane jtextcomponent autoscroll

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

为什么有些框架拒绝放弃对古老Java版本的支持?

当我坐在这里修改PircBot时,我注意到整个后端都是为了支持Java 1.1而编写的.它有一个自定义队列实现,使用哈希表,基于wait()和notify()信令的自定义生产者/消费者实现等.即使Commons-lang也缺乏对Java 5带来的东西的支持,如泛型.你可以提供一些非常流行的框架的其他例子,尽可能地努力支持1.1.

我的问题是为什么?为什么Java社区的某些部分拒绝支持新版本?我遵循这个理论:旧版本使用旧版本的框架和较旧的JVM,较新的版本使用升级的框架和JVM.您使用该软件升级所有内容.

现在我可以部分理解仍在运行Java 1.5但是1.1的人?如果您之前运行任何东西,那么您显然不会因为愚蠢的策略/害怕未知而升级JVM,因此不会升级到更新版本的软件.那么我们为什么还要支持他们呢?

在相关的说明中,如果你正在编写一个新框架,你应该支持<1.5吗?您是否应该尝试将现有框架升级为1.5,然后与维护人员讨论使用它?

更具体的讨论(这是关于一般的支持): 是否还有充分的理由支持JDK 1.4?

不再支持JRE 1.3

java backwards-compatibility forward-compatibility

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

HashMap表示Key即使存在也不存在

我遇到了一个有趣的问题,我很确定这是一个错误HashMap.考虑以下调试代码(AMap是HashMap,key是传递给此方法的值)

System.out.println("getBValues - Given: " + key);
System.out.println("getBValues - Contains Key: " + AMap.containsKey(key));
System.out.println("getBValues - Value: " + AMap.get(key));
for(Map.Entry<A,HashSet<B>> entry : AMap.entrySet()) {
    System.out.println("getBValues(key) - Equal: " + (key.equals(entry.getKey())));
    System.out.println("getBValues(key) - HashCode Equal: "+(key.hashCode() == entry.getKey().hashCode()));
    System.out.println("getBValues(key) - Key: " + entry.getKey());
    System.out.println("getBValues(key) - Value: " + entry.getValue());
}
Run Code Online (Sandbox Code Playgroud)

现在在这个Map中我插入一个键(Channel)和值.后来我尝试将值返回get()并运行此调试代码,在我的例子中给出了这个输出:

getBValues - Given: Channel(...)
getBValues - Contains Key: false <--- Doesnt contain key?!
getBValues - Value: null   <--- Null (bad)
getBValues(key) - Equal: true …
Run Code Online (Sandbox Code Playgroud)

java hashmap

6
推荐指数
2
解决办法
3313
查看次数

最好处理2个覆盖实时更新的面板?

在非常基本的术语中,我有一个面板逐个像素地绘制一条线,并且正在实时更新.除此之外,我想要另一个面板,它围绕当前像素绘制一个框,但稍后会自行清除.两者都是实时的

我目前的情况是包装JPanel有一个OverlayLayout.底部面板具有Graphics2D从其中获取的对象绘制的线JPanel.顶部面板后面的框也是使用从其获取的Graphics2D对象绘制的JPanel.

这个系统中的问题很多.因为我只是Graphics2D单独绘制对象而不是覆盖JPanel paint(),所以当面板需要重新绘制时,不仅所有线都丢失了,我想我只是通过单个线程更新屏幕来反对Swing的线程模型.我还没有让顶部面板正常工作,它只是不断清理屏幕,不会让底部面板划一条线.

处理这种情况的最佳方法是什么?我对图像处理和Swing中图像的低级显示几乎没有经验,我只知道基础知识.我听说过BufferedImage,但不知道该放置该图像的位置,如果稍后更改它将会更新,这样做的效率,以及它缓冲的事实会吓跑我.我不知道该用什么

有人能指出我正确的方向,我需要用什么来实现这一目标?

java swing

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

将传递依赖行为与xml-api混淆

在我的项目中,我依赖于几个依赖于.NET各种版本的外部库xml-apis。如果我maven-enforcer-plugin 曾经在版本冲突时失败,则我的构建失败。

在开始之前,打印正在运行的应用程序的类路径可以 xml-apis:xml-apis:1.4.01

启用后,maven-enforcer-plugin我得到了预期的结果

Dependency convergence error for xml-apis:xml-apis:1.3.04 paths to dependency are:

+-org.bbraile:bbraile:1.0-SNAPSHOT
  +-org.bbraile:utd:1.0-SNAPSHOT
    +-xalan:xalan:2.7.2
      +-xalan:serializer:2.7.2
        +-xml-apis:xml-apis:1.3.04
and
+-org.bbraile:bbraile:1.0-SNAPSHOT
  +-org.bbraile:utd:1.0-SNAPSHOT
    +-xml-apis:xml-apis:1.4.01
and
+-org.bbraile:bbraile:1.0-SNAPSHOT
  +-org.bbraile:utd:1.0-SNAPSHOT
    +-xerces:xercesImpl:2.11.0
      +-xml-apis:xml-apis:1.4.01
and
+-org.bbraile:bbraile:1.0-SNAPSHOT
  +-com.io7m.xom:xom:1.2.10
    +-xml-apis:xml-apis:1.3.03
and
+-org.bbraile:bbraile:1.0-SNAPSHOT
  +-org.apache.xmlgraphics:batik-transcoder:1.7
    +-org.apache.xmlgraphics:batik-bridge:1.7
      +-org.apache.xmlgraphics:batik-anim:1.7
        +-xml-apis:xml-apis:1.3.04
and
+-org.bbraile:bbraile:1.0-SNAPSHOT
  +-org.apache.xmlgraphics:batik-transcoder:1.7
    +-org.apache.xmlgraphics:batik-bridge:1.7
      +-org.apache.xmlgraphics:batik-css:1.7
        +-xml-apis:xml-apis:1.3.04
and
+-org.bbraile:bbraile:1.0-SNAPSHOT
  +-org.apache.xmlgraphics:batik-transcoder:1.7
    +-org.apache.xmlgraphics:batik-bridge:1.7
      +-org.apache.xmlgraphics:batik-ext:1.7
        +-xml-apis:xml-apis:1.3.04
and
+-org.bbraile:bbraile:1.0-SNAPSHOT
  +-org.apache.xmlgraphics:batik-transcoder:1.7
    +-org.apache.xmlgraphics:batik-bridge:1.7
      +-xml-apis:xml-apis:1.3.04
and
+-org.bbraile:bbraile:1.0-SNAPSHOT
  +-org.apache.xmlgraphics:batik-transcoder:1.7
    +-org.apache.xmlgraphics:batik-dom:1.7
      +-xml-apis:xml-apis:1.3.04
and
+-org.bbraile:bbraile:1.0-SNAPSHOT
  +-org.apache.xmlgraphics:batik-transcoder:1.7
    +-org.apache.xmlgraphics:batik-gvt:1.7
      +-xml-apis:xml-apis:1.3.04
and
+-org.bbraile:bbraile:1.0-SNAPSHOT
  +-org.apache.xmlgraphics:batik-transcoder:1.7
    +-org.apache.xmlgraphics:batik-svg-dom:1.7
      +-xml-apis:xml-apis:1.3.04
and
+-org.bbraile:bbraile:1.0-SNAPSHOT
  +-org.apache.xmlgraphics:batik-transcoder:1.7
    +-org.apache.xmlgraphics:batik-svggen:1.7 …
Run Code Online (Sandbox Code Playgroud)

java dependency-management maven

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