在我的代码中,所有脚本都包含在.js文件中.每当其中一个脚本包含错误时,我就会得到:
javax.script.ScriptException:sun.org.mozilla.javascript.internal.EcmaError:ReferenceError:未定义"nonexistant".(<未知来源>#5)在第5行的<未知来源>中
我不知道的是<Unknown Source>.多个文件在一个ScriptContext中,并且很难找到错误.它看起来也很糟糕.
有没有办法用实际文件名替换<Unknown Source>?我看到的所有方法都没有支持传递File对象,所以我真的很困惑.
在我的应用程序中,我有一个Controller由main方法启动的.控制器初始化钩子,数据库连接,UI,另一个连接和其他东西.它占据了程序的大部分状态(不,它不是Singleton).在另一个例子中,有一个用于机器人的控制器,用于处理解释和发出命令.两者都是相当大的文件.
我已经阅读了上帝的对象,但我真的不知道如何将它分开.如果我将机器人中的解释器和调度员分开,它将会形成一个可怕的调用链(类似于getBot().getParser().getOutput().sendMessage(recipient, message)).类似地,在第一个控制器中,如果我分开,你将只有包含字段的数据对象和一些别名实用程序方法.将它们拆分会让事情变得更糟.在你认为它不可维护之前,实际上并非如此.我甚至没有写Bot控制器,但我仍然知道发生了什么.
但问题是Bot类是2000行(如果我拿出Javadoc注释可能会更短)并且Bot大约是1000行.很多行=上帝的对象.但是对于项目的一个或两个核心类是否可以?
我正在尝试做一些我认为很简单的事情:由于空间考虑,停止创建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)
我有大约420,000个元素需要存储在某种Set或List中.但是限制是我需要能够选择一个随机元素并且需要快速.
最初我使用了ArrayList和LinkedList,但是有很多元素它很慢.当我对它进行分析时,我看到equals()我存储的对象中的方法在很短的时间内被称为大约2100万次.
接下来我尝试了一个HashSet.我在性能方面获得的东西我在功能上松了一口气:我不能选择随机元素.HashSet由HashMap支持,HashMap由一组HashMap.Entry对象支持.然而,当我试图暴露它们时,我被整个Java Collections Framework的疯狂私有和包私有可见性所阻碍(即使复制和粘贴类也不起作用,JCF非常"使用我们拥有的东西或滚动你自己的东西").
随机选择存储在HashSet或HashMap中的元素的最佳方法是什么?由于集合的大小,我宁愿不使用循环.
重要编辑:我忘记了一个非常重要的细节:我究竟是如何使用Collection的.我在桌子的乞讨处填充整个收藏品.在程序中,我选择并删除一个随机元素,然后选择并删除一些更多的已知元素,然后重复.不断查找和更改是导致缓慢的原因
在我的图书馆中有一个"用户级别"的概念.我提供了几个默认级别,但出于各种原因希望为用户提供使用自己级别的选项.
目前这被实现为
public interface AdminLevel {
public void name();
}
public enum StandardAdminLevels implements AdminLevel {
ADMIN,
ANONYMOUS
}
Run Code Online (Sandbox Code Playgroud)
问题是用户通常会在注释中传递他们所需的用户级别.我尝试过但失败的事情:
StandardAdminLevels.ADMIN.name()- 设置值失败"属性值必须是常量"有没有其他方法我想不到在注释中有可扩展的枚举?我试图坚持枚举,因为它们的清晰度和对无效值的基本保护,但我能想到的另一种方法是字符串常量.我遇到的问题是需要在每个单点使用用户级别进行验证,甚至可能在客户端代码中
有任何想法吗?
我试图在包含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) 当我坐在这里修改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?
我遇到了一个有趣的问题,我很确定这是一个错误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) 在非常基本的术语中,我有一个面板逐个像素地绘制一条线,并且正在实时更新.除此之外,我想要另一个面板,它围绕当前像素绘制一个框,但稍后会自行清除.两者都是实时的
我目前的情况是包装JPanel有一个OverlayLayout.底部面板具有Graphics2D从其中获取的对象绘制的线JPanel.顶部面板后面的框也是使用从其获取的Graphics2D对象绘制的JPanel.
这个系统中的问题很多.因为我只是Graphics2D单独绘制对象而不是覆盖JPanel paint(),所以当面板需要重新绘制时,不仅所有线都丢失了,我想我只是通过单个线程更新屏幕来反对Swing的线程模型.我还没有让顶部面板正常工作,它只是不断清理屏幕,不会让底部面板划一条线.
处理这种情况的最佳方法是什么?我对图像处理和Swing中图像的低级显示几乎没有经验,我只知道基础知识.我听说过BufferedImage,但不知道该放置该图像的位置,如果稍后更改它将会更新,这样做的效率,以及它缓冲的事实会吓跑我.我不知道该用什么
有人能指出我正确的方向,我需要用什么来实现这一目标?
在我的项目中,我依赖于几个依赖于.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 ×10
hashmap ×2
maven ×2
swing ×2
annotations ×1
autoscroll ×1
collections ×1
controller ×1
enums ×1
god-object ×1
hashset ×1
jscrollpane ×1
jsr223 ×1
rhino ×1