从一个坐标到另一个坐标

我从http://www.movable-type.co.uk/scripts/latlong.html实施了“方位”公式。 但它似乎非常不准确 – 我怀疑我的实施中有些错误。 你能帮我找到它吗? 我的代码如下: protected static double bearing(double lat1, double lon1, double lat2, double lon2){ double longDiff= lon2-lon1; double y = Math.sin(longDiff)*Math.cos(lat2); double x = Math.cos(lat1)*Math.sin(lat2)-Math.sin(lat1)*Math.cos(lat2)*Math.cos(longDiff); return Math.toDegrees((Math.atan2(y, x))+360)%360; }

为什么核心库中的某些java方法以数字结尾?

它在JDK的很多类中都很常见,只有几个例子: java.util.Properties load0 store0 java.lang.Thread中 START0 STOP0 setPriority0 通常它们是私有本机方法(如在Thread类中),但有时它们只是私有的(Properties类) 如果有人知道背后是否有任何历史,我只是好奇。

为什么不对JSF页面进行预编译(至少部分),而是在每次构建视图时进行解析,评估?

我不知道它是否真实,但据我所知,我相信,JSF EL和xhtml页面不是预编译的,只是在需要时使用,而是每次查看时都会对它们进行解析,评估和编译建成。 我不明白为什么这样做! 为什么不只是解析和编译它一次,好吧至少部分,渲染一些组件可能依赖于动态获取的变量,因此它们可能会在稍后呈现,但为什么延迟页面上的所有组件? 无论最大值可以预先编译并准备好使用,为什么不在部署应用程序时执行此操作? 这不会改善页面的渲染时间吗?

没有获取特定区域设置的货币符号

我试图根据他们的Locale获取货币的符号。 但它没有返回符号,而是返回代码。 我有一个片段: import java.util.Currency; import java.util.Locale; public class CurrencyFormat { public void displayCurrencySymbols() { Currency currency = Currency.getInstance(Locale.US); System.out.println(“United States: ” + currency.getSymbol()); } public static void main(String[] args) { new CurrencyFormat().displayCurrencySymbols(); } } 对于Locale.US,它给出符号$但是如果我替换 Currency currency = Currency.getInstance(Locale.US); 同 Currency currency = Currency.getInstance(Locale.GERMANY); 然后代替符号,它给出了国家代码。 为什么这样以及我们如何获得符号? 编辑:看了一些答案之后我想清楚设置一些特定的默认本地不是解决方案,因为我需要一次显示所有可用的符号 。 例如 Locale.setDefault(Locale.UK); 会给我欧元符号但是对于doller它会给代码而不是doller符号($)。

在RXTX中收到的问题

我已经使用RXTX大约一年了,没有太多问题。 我刚开始一个新的程序与一个新的硬件进行交互,所以我重用了我在其他项目中使用的connect()方法,但我有一个我以前从未见过的奇怪问题。 问题 该设备工作正常,因为当我连接HyperTerminal时,我发送东西并收到我期望的东西, 串口监视器 (SPM)反映了这一点。 但是,当我运行简单的HyperTerminal-clone时,我编写了诊断我的主要应用程序的问题,根据SPM发送字节,但没有收到任何内容,我的SerialPortEventListener永远不会触发。 即使我在主循环中检查可用数据, reader.ready()返回false 。 如果我忽略了这个检查,那么我会得到一个例外,详情如下。 connect()方法的相关部分 // Configure and open port port = (SerialPort) CommPortIdentifier.getPortIdentifier(name) .open(owner,1000) port.setSerialPortParams(baud, databits, stopbits, parity); port.setFlowControlMode(fc_mode); final BufferedReader br = new BufferedReader( new InputStreamReader( port.getInputStream(), “US-ASCII”)); // Add listener to print received characters to screen port.addEventListener(new SerialPortEventListener(){ public void serialEvent(SerialPortEvent ev) { try { […]

为什么Thread.sleep使用不好

为这个重复的问题道歉,但我还没有找到任何令人满意的答案。 大多数问题都有自己的特定用例: Java – thread.sleep的替代品 有没有更好的或替代的方法来跳过/避免在Java中使用Thread.sleep(1000)? 我的问题是非常通用的用例。 等待条件完成。 做一些操作。 检查条件。 如果条件不成立,请等待一段时间再次执行相同的操作。 例如,考虑一种通过调用其createAPI表来创建DynamoDB表的方法。 DynamoDB表需要一些时间才能变为活动状态,因此该方法会调用其DescribeTable API以定期轮询状态直到某个时间(假设5分钟 – 由于线程调度而导致的偏差是可接受的)。 如果表在5分钟内变为活动状态,则返回true,否则抛出exception。 这是伪代码: public void createDynamoDBTable(String name) { //call create table API to initiate table creation //wait for table to become active long endTime = System.currentTimeMillis() + MAX_WAIT_TIME_FOR_TABLE_CREATE; while(System.currentTimeMillis() < endTime) { boolean status = //call DescribeTable API to get […]

Java大文件磁盘IO性能

我的硬盘上有两个(每个2GB)文件,想要将它们相互比较: 使用Windows资源管理器复制原始文件大约需要。 2-4分钟(即读写 – 在同一物理和逻辑磁盘上)。 使用java.io.FileInputStream读取两次并在每个字节的字节上比较字节数组需要20多分钟。 java.io.BufferedInputStream缓冲区为64kb,文件以块的forms读取然后进行比较。 比较完成是一个紧凑的循环之类 int numRead = Math.min(numRead[0], numRead[1]); for (int k = 0; k < numRead; k++) { if (buffer[1][k] != buffer[0][k]) { return buffer[0][k] – buffer[1][k]; } } 我该怎么做才能加快速度呢? NIO应该比普通的流更快吗? Java无法使用DMA / SATA技术,而是执行一些缓慢的OS-API调用吗? 编辑: 谢谢你的回答。 我做了一些基于它们的实验。 正如安德烈亚斯所示 流或nio方法没有太大差别。 更重要的是正确的缓冲区大小。 我的实validation实了这一点。 由于文件是以大块读取的,所以即使是额外的缓冲区( BufferedInputStream )也不会提供任何内容。 优化比较是可能的,并且我通过32次展开获得了最佳结果,但与磁盘读取相比,花费的时间比较小,因此加速很小。 看起来我无能为力;-(

在使用迭代器时解释集合的同步?

我知道像Hashtable这样的集合是同步的,但是有人可以向我解释它是如何工作的,以及在什么时候访问仅限于并​​发调用? 例如,假设我使用了一些像这样的迭代器: Hashtable map = new Hashtable(); void dosomething1(){ for (Iterator<Map.Entry> i = map.entrySet().iterator(); i.hasNext();){ // do something } } void dosomething2(){ for (Iterator<Map.Entry> i = map.entrySet().iterator(); i.hasNext();){ // do something // and remove it i.remove(); } } void putsomething(int a, int b){ map.put(a,b); } void removesomething(int a){ map.remove(a); } var clear(){ map = new […]

在Java中使用相对目录路径

我试图使用相对路径来定位Java类中的可执行文件,而不是使用硬编码的行,但使用类似于: final static String directory = “../../../ggla/samples/obj/linux_x86” 失败…在Java中使用相对路径的正确方法是什么?

使用Java的Selenium WebDriver和HTML Window位置

我将Selenium WebDriver与java.awt.Robot结合使用,以更好地模拟用户与Web应用程序的交互。 是的,我知道这可能是不必要的,但我服务的客户要求它。 目前事情进展顺利,但我有一个小问题,我似乎找不到一个好的方法来获取屏幕位置的网页元素。 标题栏,菜单栏,导航栏等所有内容都会将内容推到物理屏幕上(Robot从中获取坐标),但对Selenium报告元素的位置没有影响。 当我调用: element.getLocation(); 在Selenium WebElement上,它总是给我相对于HTML内容呈现窗格的位置,而不是浏览器窗口本身。 更好的例子是: driver.findElement(By.tagName(“body”)).getLocation(); 无论窗口的实际屏幕位置如何,始终返回0,0。 现在我通过在最大化窗口后添加垂直和水平偏移来攻击它,但是这些在不同的浏览器之间是不一样的(例如,IE的顶部装饰占用了比Firefox更多的空间),并且对于每个用户可能是不同的如果他们有书签工具栏,搜索栏等添加。 是的,我知道我可以在全屏模式下运行,但如果可能的话,我宁愿不这样做。 有没有办法使用WebDriver以可靠的方式获取元素的物理屏幕位置?