在Java中工作,假设我有两个对象,多亏了obj.getClass().isArray(),我知道它们都是数组.让我们进一步说,我想将这两个数组相互比较 - 可能是通过使用Arrays.equals.是否有一种优雅的方式来做到这一点,而不是诉诸一个大的详尽的if/else树来找出Arrays.equals需要使用的味道?我正在寻找的东西不像这样:
if (obj1 instanceof byte[] && obj2 instanceof byte[]) {
return Arrays.equals((byte[])obj1, (byte[])obj2);
}
else if (obj1 instanceof boolean[] && obj2 instanceof boolean[]) {
...
Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,此时此刻,我甚至不知道如何正确调查.欢迎并赞赏有关如何获取更多信息的任何建议.
我公司销售的产品以WinXP PC为核心.该产品的任务之一是能够按需启动视频播放器 - 在这种情况下是VLC.(具体来说,VLC为0.8.6d;它已经过时了几年,但升级是有问题的,原因有几个.)负责启动播放器并执行许多其他任务的应用程序是用Java编写的.
我的桌子旁边有一个试验台.过去工作得很好.但由于某种原因,当Java应用程序尝试启动VLC时,它现在会发出"发送错误报告"窗口:"VLC媒体播放器遇到问题,需要关闭......"你知道那个.
显然,我已经做了一些令人烦恼的事情.问题是,我既不知道它可能是什么,也不知道如何修复它.
我知道的东西:
我很难过.关于它可能是什么或如何弄清楚它是什么的建议是非常受欢迎的.
我曾经在这里问过有关通过Java控制Windows Media Player的问题. 我已经取得了进步,但我遇到了一个棘手的问题,所以我回来寻求帮助.
我按照上次给出的建议,安装雅各布.我从测试脚本中执行这些行:
ActiveXComponent wmp = new ActiveXComponent("WMPlayer.OCX");
wmp.invoke("openPlayer", "http://somafm.com/wma128/groovesalad.asx");
Run Code Online (Sandbox Code Playgroud)
...和WMP弹出,玩SomaFM."W00t!" 我认为."我已经解决了这个问题!"
除了当我在创建它之后与该对象交互时,它似乎与WMP实例播放没有任何关系.当我执行此代码时:
ActiveXComponent wmpSettings = new
ActiveXComponent(wmp.getProperty("settings").toDispatch());
System.out.println("VOLUME: " + wmpSettings.getProperty("volume"));
wmpSettings.setProperty("volume", 0);
System.out.println("VOLUME: " + wmpSettings.getProperty("volume"));
Run Code Online (Sandbox Code Playgroud)
...我得到的输出:
VOLUME: 50 VOLUME: 0
这似乎无害,除此之外
我也尝试了其他属性,但它是一样的:属性的值似乎与玩家实际做的事情没有关系,而改变它们似乎改变了被操纵对象的状态,它对实际玩家没有影响. (每次运行脚本时,我都得到完全相同的输出,所以无论是什么,当我转动"音量"时我都会改变它,它在代码之外没有任何持久性.)
显然我做错了什么,但我一直摸索着试图找出什么.任何人都可以向我提供任何有关出错的信息,或者我接下来应该尝试的内容吗?
(注意:我甚至不确定"WMPlayer.OCX"是正确的输入参数.我在注册表中的HKEY_CLASSES_ROOT中试验了看起来很可能的条目,直到找到这个.)
我提前感谢任何人提供的任何帮助.
编辑,4/15/2009: 我在一家名为EZ JCom的公司的产品中找到了一个特定于WMP的软件包.它失败的方式与我之前看到的完全相同,要么它只是Jacob的包装器,要么是WMP ActiveX/COM接口完全坏了.(等等,为什么我说"要么"?)
我与客户服务人员聊天,他们最终展示了如何在没有实际用处的情况下提供帮助.他们帮助我纠正了他们提供的非编译示例代码作为他们的WMP代码的实例,但是当我纠缠他们以了解get/set卷方法应该如何工作时,我得到了这个:
"对不起,但这里没有WMP深度专业知识--EZ JCom只是Java与WMP等其他程序之间的桥梁建设者."
请记住,我评估的他们的包实际上被称为"wmp.WindowsMediaPlayer".如果我得到它的工作,我将不得不与我的老板谈论花费600美元的许可证.人们想知道如果他们真正拥有自己产品的专业知识,他们会收取什么费用.
所以,没有真正的进步.只是想我会分享.
编辑,2009年4月20日: 是的,我仍然在嘲笑这个.我目前的操作理论是,为了获得音量设置,我需要远程访问WMP.我已经看到了IWMPRemoteMediaServices和IServiceProvider接口的提及,后者的QueryService方法提供了指向前者的指针.不幸的是,我没有任何关于如何获得IServiceProvider的运气.我已经看到提到它可以从Windows"系统"对象访问,但我无法弄清楚如何获取该对象.(而且由于"系统"这个词在Java中非常重要,谷歌给了我一个喧闹的声音:信号比率.)如果有人对如何把手放在代表System.dll的COM对象上有任何建议,我很乐意听到.
编辑,4/21/2009: 澄清:这是在XP系统上.
另外:我的研究表明仅仅谈论WMP对象是不够的; 你需要把它包裹得更紧,所以它可以回复.有一个包含大量C++内容的WMP SDK,但它似乎依赖于Microsoft Visual C++对我没有的代码的扩展,并且它们不是免费赠送的.(此外,我在12年内没有完成C++.)我知道C#可以实现,但如果我不在Java之外,我需要将解决方案作为独立的可执行文件并且不安装.NET相关的机器.
编辑,2009年4月22日: 根据Mark的答案,我从WinUser.h中挖出了APPCOMMAND_MEDIA_*常量并尝试了以下代码,它使用了NativeCall api:
final int APPCOMMAND_MEDIA_PLAY = 46;
final int APPCOMMAND_MEDIA_PAUSE = …Run Code Online (Sandbox Code Playgroud) 我正在开发一个独立的Flash应用程序(使用Flex 3/ActionScript 3编写),它具有文本爬行功能,就像您在观看有线新闻频道时可能在电视底部看到的那样; 它是一个长而窄的盒子,文本从右到左移动.
我已经通过创建Label元素,用文本填充它,然后使用带有Linear.easeNone缓动函数的mx:Move对象移动它来实现它.它有效,但它有很大的改进空间.它看起来有点生涩,往往会有相当多的"撕裂"(文本的上半部分和下半部分有时会失去同步).
我尝试在问题上投掷数学,以使爬行的移动速率与显示器的刷新率同步,但这是一个半身像.我发现应用程序的帧速率跳得太厉害了."优化"爬行在看起来如丝般光滑和癫痫之间变化.
还有什么人会推荐我试着让这个东西顺利出来吗?你尝试过一些替代设计吗?
是否有一个简单的命令可以让我调整一个MySQL数据库实例比正常运行慢?
我正在研究记录和重放数据库交互的代码.它所做的一件事就是跟踪给定查询/命令执行的时间,如果它在重放期间运行得非常慢,则会发出警告.当然,如果你不测试它,它不起作用; 我正在尝试为此功能进行自动测试.我可以对我的测试数据库做些什么来搞砸性能?我需要做的就是可靠地为任何给定的查询添加2+毫秒,并且我已经设置好了.
我正在使用一个Web应用程序,通常在Apache下运行mod_perl.一位同事和我正在尝试进行一些单元测试.是否有任何好的工具或技术可用于模拟会话和请求等,以帮助我们在Web服务器上下文之外运行此代码?
我正在尝试input根据用户操作更改文本字段的值。我是这样做的:
document.getElementById(textFieldID).value = newValue;Run Code Online (Sandbox Code Playgroud)
它不是很有效——字段中的原始文本保留在屏幕上,没有改变。但是,当我提交表单时,它的行为好像确实正确更改了值。(并且调试alert确认是的,我正在点击代码中的那一点并传入正确的字段 ID 和文本值。)有人有任何见解吗?我需要做些什么来重绘input元素吗?
<script LANGUAGE="JavaScript" TYPE="text/javascript">
function changeText(changeSelector)
{
var myindex = document.getElementById(changeSelector+"Recent").selectedIndex;
var SelValue = document.getElementById(changeSelector+"Recent").options[myindex].value;
document.getElementById(changeSelector).value = SelValue;
document.getElementById("historicalText").value = SelValue;
document.getElementById("historicalTextSelect").value = changeSelector;
}
</script>
<input onChange="updateScrollingPreview1217(this); return true;" type="text" id="crawlMsg1217" name="crawlMsg1217" size="60" maxlength="1000" value="">
<select id="crawlMsg1217Recent" name="crawlMsg1217Recent" onchange="javascript:changeText('crawlMsg1217');">
[options go here]
</select>
Run Code Online (Sandbox Code Playgroud)
而那个“onChange”处理程序并不是阻碍工作的原因;无论有没有它,我都会得到相同的行为。
我正在使用JPA的EclipseLink实现来与PostgreSQL数据库进行通信的项目.我有一个任务,PostgreSQL NOTIFY/LISTEN似乎是一个完美的契合.不幸的是,我是一个JPA新手,我正在努力弄清楚如何让它工作.所以我想我真的有两个问题; 回答任何一个都会让我开心.
1)对于掌握与数据库的直接JDBC连接,最好的方法是什么?(我真心希望这将成为类型org.postgresql.PGConnection.)
要么
2)org.postgresql.PGConnection.getNotifications()通过EclipseLink JPA 模拟/访问的最佳方式是什么?
非常感谢您的帮助.
我试图curl从Windows命令行运行一个命令,但对于我的生活,我无法弄清楚我应该如何逃避它.
我正在执行这个:
C:\WINDOWS\system32>curl --anyauth --user user:password -X POST -d "{\"rest-api\":{\"name\":\"BizSimDebug3\"}}" -H "Content-type: application/xml" http://localhost:8002/v1/rest-apis
Run Code Online (Sandbox Code Playgroud)
我得到了这个:
<rapi:error xmlns:rapi="http://marklogic.com/rest-api">
<rapi:status-code>400</rapi:status-code>
<rapi:status>Bad Request</rapi:status>
<rapi:message-code>RESTAPI-INVALIDCONTENT</rapi:message-code>
<rapi:message>Your bootstrap payload caused the server to throw an error. Underlying error message: XDMP-DOCROOTTEXT: xdmp:get-request-body() -- Invalid root text "{&quot;rest-api&quot;:{&quot;name&quot;:&quot;BizSimDebug3&quot;}}" at line 1</rapi:message>
</rapi:error>
Run Code Online (Sandbox Code Playgroud)
还有什么我需要做的事情来逃避-d标志中的内部引号吗?还是我完全忽略了真正的问题?
java ×3
windows ×2
actionscript ×1
activex ×1
apache ×1
apache-flex ×1
arrays ×1
curl ×1
eclipselink ×1
javascript ×1
jpa ×1
marklogic ×1
mysql ×1
pdo ×1
perl ×1
php ×1
postgresql ×1
unit-testing ×1
vlc ×1