小编Joh*_*ian的帖子

调试内部编译器错误(Java)以查找有问题的源代码

由于JDK错误,我设法编写了一些在使用JDK 1.8.0_131进行编译时导致错误的代码.我只用几行代码就可以重现这个问题 - 但是我找不到项目中使用错误的模式的位置.

我的目标是弄清楚我的项目中的哪些代码导致了这个错误,并应用了一种解决方法.

问题和复制

JDK-8074381错误报告中概述了该问题,并且只能在几行代码中复制.

public class Test {
  public interface Foo<L> extends Function<Number, String> {
    String apply(Number p);
  }
  private static final Foo CRASH = p -> "This will crash javac 1.8.0_131";
}
Run Code Online (Sandbox Code Playgroud)

当使用非参数化的lambda而不是非参数化的内部类(根据我认为的语言规范应该都是有效的)时,问题就会出现.所以

private static final Foo INNER = new Foo<Object>() {
  @Override
  public String apply(final Number p) {
    return "This will not crash javac 1.8.0_131";
  }
};
Run Code Online (Sandbox Code Playgroud)

工作良好.违规堆栈跟踪开始(为了您的理智而被截断):

An exception has occurred in the compiler (1.8.0_131). Please file a bug against the Java compiler …
Run Code Online (Sandbox Code Playgroud)

java generics lambda java-8 internal-compiler-error

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

如何使用Java发送M-SEARCH查询

我的网络上有一个Roku设备,我希望能够以编程方式发现它.该负责人Roku公司文件称:

有一个标准的SSDP多播地址和端口(239.255.255.250:1900),用于本地网络通信.Roku响应此IP地址和端口上的M-SEARCH查询.

为了查询roku ip地址,您的程序可以使用http协议将以下请求发送到239.255.255.250端口1900:

他们提供了一个使用netcat的例子,他们说wireshark可以用来查找结果.他们还说:

外部控制协议使Roku能够通过网络进行控制.可以通过SSDP(简单服务发现协议)发现外部控制服务.该服务是一个简单的RESTful API ,几乎可以在任何编程环境中由程序访问.

我有一个java程序控制我的Roku给定其IP地址,我想实现一个功能,使用此SSDP在网络上发现它.

如何使用java发送M-SEARCH查询?我绝对不知道如何做到这一点.这是一个获取/发布请求?如果有人能指出我正确的方向,我将非常感激!

java networking ssdp

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

合并influxdb中的不同粒度时间序列

我想存储交易以及最佳要价/出价数据,后者在InfluxDB中的更新速度比前者快得多。

我想,如果可能的话,使用一种允许我查询的模式:“对于市场X上的每笔交易,找到其时间标记<=该交易的时间标记的市场Y上的最佳要价/出价”。

(我将使用任何版本的Influx。)

例如,交易可能看起来像这样:

   Time      Price     Volume   Direction   Market
00:01.000     100        5          1       foo-bar
00:03.000     99         50         0       bar-baz       
00:03.050     99         25         0       foo-bar
00:04.000     101        15         1       bar-baz
Run Code Online (Sandbox Code Playgroud)

刻度数据可能更像这样:

   Time       Ask        Bid     Market
00:00.763     100         99    bar-baz
00:01.010     101         99    foo-bar
00:01.012     101         98    bar-baz
00:01.012     101         99    foo-bar
00:01:238     100         99    bar-baz
...
00:03:021     101         98    bar-baz
Run Code Online (Sandbox Code Playgroud)

我希望能够以某种方式加入某个市场(例如foo-bar)的每笔交易,而只有其他市场(例如bar-baz)上的最新卖/卖点数据点,才能得到如下结果:

   Time      Trade Price    Ask     Bid
00:01.000        100        100      99
00:03.050        99         101      98
Run Code Online (Sandbox Code Playgroud)

这样我就可以计算出市场foo-bar上的交易价格与最新报价的市场 …

database influxdb influxql influxdb-2

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

为什么我可以从非UI线程而不是ListView更新TableView?

我在JavaFX(java版本1.8.0_91)中遇到了一些奇怪的东西.我的理解是,如果想要从单独的线程更新UI,则必须使用包Platform.runLater(taskThatUpdates)中的工具或其中一个工具javafx.concurrent.

但是,如果我有一个TableView我打电话.setItems(someObservableList),我可以someObservableList从一个单独的线程更新,看到我的相应更改TableView没有预期的Exception in thread "X" java.lang.IllegalStateException: Not on FX application thread; currentThread = X错误.

如果我替换TableViewListView,则会发生预期的错误.

情况#1的示例代码:TableView从不同的线程更新a ,没有调用Platform.runLater()- 并且没有错误.

public class Test extends Application {

    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        // Create a table of integers with one column to display
        TableView<Integer> data = new TableView<>();
        TableColumn<Integer, Integer> …
Run Code Online (Sandbox Code Playgroud)

java concurrency javafx javafx-8

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

Clojure/FP:将函数应用于运算符的每个参数

假设我有几个向量

(def coll-a [{:name "foo"} ...])
(def coll-b [{:name "foo"} ...])
(def coll-c [{:name "foo"} ...])
Run Code Online (Sandbox Code Playgroud)

并且我想看看第一个元素的名称是否相等.

我可以

(= (:name (first coll-a)) (:name (first coll-b)) (:name (first coll-c)))
Run Code Online (Sandbox Code Playgroud)

但随着更多功能的组合,这很快就会变得疲惫和过于冗长.(也许我想比较第一个元素名称的最后一个字母?)

直接表达计算的本质似乎是直观的

(apply = (map (comp :name first) [coll-a coll-b coll-c]))
Run Code Online (Sandbox Code Playgroud)

但它让我想知道这种事情是否有更高级别的抽象.

我经常发现自己比较/以其他方式操作通过应用于多个元素的单个合成来计算的东西,但是地图语法看起来有点偏离我.

如果我要回家酿造某种运算符,我会想要语法

(-op- (= :name first) coll-a coll-b coll-c)
Run Code Online (Sandbox Code Playgroud)

因为大多数计算都表达在(= :name first).

我想要一个抽象应用于运算符和应用于每个参数的函数.也就是说,它应该与比较一样容易.

(def coll-a [{:name "foo" :age 43}])
(def coll-b [{:name "foo" :age 35}])
(def coll-c [{:name "foo" :age 28}])

(-op- (+ :age first) coll-a coll-b coll-c) …
Run Code Online (Sandbox Code Playgroud)

functional-programming clojure operators higher-order-functions

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

在Ubuntu Python 2.7中读取os.system()命令的输出

所以我在Ubuntu 11.4和Python 2.7上运行看起来像这样的代码:

p_scan_command = "sudo nmap -sC -sV -PN -O 192.168.0.1/24"
time.sleep(1.5)
os.system(p_scan_command)
f = open('nmapscan1.log', 'r')
print f.read()
f.close()
Run Code Online (Sandbox Code Playgroud)

发生的事情是我最终没有结果,并且扫描没有运行,可能是因为它正在运行'sudo'.我想知道

  1. 如果我对问题的诊断是正确的,那么
  2. 怎么解决?

python ubuntu os.system python-2.7 ubuntu-11.04

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