小编use*_*686的帖子

简单的非阻塞服务器

为了编写即时消息程序,我试图组成一个简单的服务器类,它将在自己的线程中运行.

服务器应该做什么

  • 接受来自/连接到服务器的其他实例的连接,并将Map<Integer, SelectionKey> keys具有ID 的连接的选择键关联,以便信使线程可以通过ID访问连接
  • 读/写连接
  • 将传入的消息存储在队列中
  • 信使线程可以
    • 获取传入的消息
    • 要发送的队列消息: send_message(int id, String msg)

我目前的方法主要基于这个例子:一个带有Java nio的简单非阻塞Echo服务器.
我还使用了使用选择器来管理非阻塞套接字和已编辑的页面,以了解非阻塞套接字和选择器.

目前的代码

  • EJP的建议已实施
  • 微小的变化
package snserver;

/* imports */

//class SNServer (Simple non-blocking Server)

public class SNServer extends Thread {
    private int port;
    private Selector selector;
    private ConcurrentMap<Integer, SelectionKey> keys; // ID -> associated key
    private ConcurrentMap<SocketChannel,List<byte[]>> dataMap_out;
    ConcurrentLinkedQueue<String> in_msg; //incoming messages to be fetched by messenger thread

    public SNServer(int port) {
        this.port = port;
        dataMap_out = …
Run Code Online (Sandbox Code Playgroud)

java network-programming nonblocking

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

从View中添加所有来自XML的子视图后回调?

我正在编写自定义ViewGroup并遇到以下问题:

ViewGroup,应能通过仅XML指定属性可用.然而,我想要做一些内部的初始化代码后ViewGroup已创建及其所有子View期从XML已被添加(即,当布局充气增加了所有孩子View的A S ViewGroup在XML中指定).

我发现与此相关的所有建议都是使用的getViewTreeObserver().addOnGlobalLayoutListener(...).然而,这至少在每个孩子View被添加之后以及在恢复应用程序等之后被调用.因此它甚至不能检测所有孩子View被添加的时刻.

在将所有子项View添加到a 后,是否有一个方法被调用ViewGroup

相关:何时从XML向Layout/ViewGroup添加子视图

xml android callback android-custom-view

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

为什么解析错误?缩进?

我写了这段代码:

addNums key num = add [] key num
    where add res a:as b:bs
        | a == [] = res
        | otherwise = add res:(a+b) as bs
Run Code Online (Sandbox Code Playgroud)

在第3行,口译员说:

解析错误(可能是错误的缩进)

我找不到任何错误,既没有代码也没有缩进.我为每个标签放了四个空格.

注解:

即使这不编译:

addNums key num = add [] key num
    where add res a:as b:bs
            | a == [] = res
            | otherwise = add res:(a+b) as bs
Run Code Online (Sandbox Code Playgroud)

第2行:

模式中的解析错误:添加

haskell indentation pattern-matching parse-error

3
推荐指数
1
解决办法
1万
查看次数

项目/选择中的"全部替换"不起作用?

在NetBeans 7.2,选择包或一个项目,打开对话框后Edit->Replace或者Edit->Replace in projects,我无法找到一个按钮或选项,以取代所有出现.我找到的唯一方法是打开一个文件,选择Edit->Replace然后"全部替换",但这显然只适用于当前文件.

如何在文件,包,项目......的自定义选择中查找和替换?

编辑

"搜索结果"窗口如下所示Edit->Replace in projects...->Find:搜索结果窗口

没有按钮或菜单来进行更换.

netbeans replace

3
推荐指数
1
解决办法
2903
查看次数

除了C++之外还有输出流吗?

我的C++书给出了以下关于以下示例cout:

cout << "literals" << "to be" << "printed" ;
Run Code Online (Sandbox Code Playgroud)

然后,它继续说:

语句以输出流的名称cout开头

这似乎意味着还有其他流.除了coutC++ 之外还有其他输出流吗?这些是什么?

c++ cout language-design

2
推荐指数
3
解决办法
827
查看次数

XMonad:有没有办法绑定同时触发的键盘?

有没有一种方法,使同时按键成键绑定,例如用于键w,e,f,当0.05秒彼此的内按下,触发命令?

更具体:

  1. 如果w,e,f被0.05秒彼此的内压,则在按下的最后一个,XMonad应该触发所述命令.XMonad也应截获三个键,以便它们不会被多余地发送到聚焦窗口.

  2. 否则(如果在0.05秒的时间内没有按下其中一个)XMonad应像往常一样将密钥发送到聚焦窗口.

我在这个目标是用w,e,f"逃"到一个VIM般的"正常模式",一个XMonad.Actions.Submap(子图).


使用失败的方法更新,以防任何人都可以看到修复它的方法:

我尝试使用子图实现这一点,所以,例如,如果你按下了,w你最终会进入chord_mode_w,如果你e从那里按下,你最终会进入chord_mode_we,如果你f从那里按下,你最终会最终进入normal_mode,例如.实现非常混乱:我在主要的键绑定中包括:

("w", spawn "xdotool key <chord_mode_w_keybinding> ; sleep 0.05 ; xdotool key <abort_keybinding>")
(chord_mode_w_keybinding, chord_mode_w)
Run Code Online (Sandbox Code Playgroud)

用于检测w(其余部分类似),以及(不完整的)子图,例如:

 chord_mode_w = submap . mkKeymap c $
              [
                      ("e",  chord_mode_we )
                    , ("f",  chord_mode_wf )
                    , (abort_keybinding, pasteString "w")

                    -- in order for the …
Run Code Online (Sandbox Code Playgroud)

xmonad key-bindings

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

Ubuntu中的Java FX与JDK7(FX路径?)

为了在Netbeans中使用Java FX,我用ppa安装了java jdk 7 .根据Netbeans 指令,我尝试在Netbeans的Java平台中启用JavaFX.问题是我必须进入FX的路径:

在Netbeans中启用JavaFX

注意:此图像只是指令中的一个示例,我的平台是"JDK 1.7".

使用ppa安装jdk7时,JavaFX位于何处?(我检查了java版本,1.7.0_03所以应该包括FX)

ubuntu netbeans javafx java-7

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