小编Mar*_*ius的帖子

你如何更改Java程序的Dock图标?

如何在Macintosh平台上用Java更改程序的Dock图标?我听说过使用Apple的Java库(在Mac平台上提供某种额外的支持),但我还没有找到一些实际的例子.

java macos icons dock

22
推荐指数
5
解决办法
2万
查看次数

每个客户端模型或NIO反应器模式的旧I/O线程?

我正在编写多人游戏的服务器端网络.该游戏是一款RPG,它拥有2000名玩家的绝对最大容量,但它实际上最多可以达到300名玩家,尽管它可能更高或更低.时间最长的,每次我不得不这样做网络它涉及大量客户端的时候,我一直坚持着NIO,因为它并不需要使用数百个线程的.最近,我遇到了一个PowerPoint演示文稿,它详细描述了这两个模型,它几乎使得每个客户端的模型看起来优于NIO.我还发现了一些地方,它表明老IO实际上也可以超越NIO.

PowerPoint可以在这里找到(它有点旧):http://www.mailinator.com/tymaPaulMultithreaded.pdf.

我还没有写任何内容,所以如果我不得不改变整个网络设计,那么从一开始就不会有问题.我没有时间压力.最初,我正在使用NIO设计反应器模式实现(选择一个事件,调度一个处理事件的处理程序).

更多信息可以在这里找到:http://en.wikipedia.org/wiki/Reactor_pattern

我的整个reactor实现旨在使用单个线程.由于我读到旧的IO可以超越,它实际上让我处于两难境地.我并不想设计一个使用多线程只是把所有的CPU功率的充分利用复杂的NIO系统,但我也畏缩在具有单一的应用程序中使用线程300+的想法.哪种设计适合我的目的?每个客户端的线程优势在于它本质上真正使用了所有CPU功能,但同时也使系统陷入困境.更不用说,单个线程的堆栈大小占用了大量内存(乘以几百倍).我应该坚持反应堆模式吗?

我知道这个问题是有点暧昧,但我觉得我需要特别提出一个问题,我的情况,因为我无法找到这个网站,也不是一个网站,它解决了我的排序问题的问题.有一个关于游戏,但该游戏旨在处理成千上万的玩家.

非常感谢!如果您需要任何澄清,请询问!

java networking multithreading nio

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

Java反编译器如何从while循环中识别for循环?

考虑这两种方法:

public static void forLoop(int start, int limit) {
    for (int i = start; i < limit; i++) {

    }
}

public static void whileLoop(int start, int limit) {
    int i = start;
    while (i < limit) {
        i++;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译时,它们会产生字节码(这是详细的输出javap):

  public static void forLoop(int, int);
    descriptor: (II)V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=2
         0: iload_0
         1: istore_2
         2: iload_2
         3: iload_1
         4: if_icmpge     13
         7: iinc          2, 1
        10: goto          2
        13: return
      LineNumberTable:
        line …
Run Code Online (Sandbox Code Playgroud)

java decompiling

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

将UDP与NIO结合使用有什么意义?

NIO和TCP为很多连接做出了很好的配对.由于需要为每个新客户端打开一个新连接,因此每个客户端通常都需要自己的线程来阻止I/O操作.NIO通过允许在可能的情况下读取数据来解决该问题,而不是在可用之前阻塞.但是UDP怎么样?

我的意思是,无连接UDP不具有与之关联的TCP的阻塞性质,因为协议的设计方式(基本上是发送并忘记它).如果我决定将某些数据发送到某个地址,那么它会这样做,没有延迟(在服务器端).同样,如果我想读取数据,我只能接收来自不同来源的单个数据包.我不需要与许多地方有很多连接,使用许多线程来处理它们中的每一个.

那么,NIO和选择器如何增强UDP?更具体地说,什么时候人们更愿意使用UDP与NIO而不是ol' java.net包?

java networking udp nio tcp

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

Xcode更改/删除评论模板

最近我一直在学习如何编程C.在大多数情况下,我一直在使用Eclipse的C版本.最近,我尝试了Xcode.我正在使用运行Mac OS X Lion的Mac - Xcode 4.1版.

我有一个不满:在我创建的每个文件的顶部,有一小部分评论我希望删除或更好,更改.

当我创建一个文件时,默认情况下这样的东西放在文件的顶部:

//
//  FILE.c
//  PROJECT NAME
//
//  Created by Martin Tuskevicius on DATE.
//  Copyright YEAR ORGANIZATION (my school name for some reason). All rights reserved.
//
Run Code Online (Sandbox Code Playgroud)

显然,首都的东西将被实际价值取代.对于那些已经使用或已经使用Xcode进行编程C的人 - 你知道如何更改或删除这些默认注释的方法吗?

我非常感谢任何帮助.谢谢!

c macos xcode comments

9
推荐指数
2
解决办法
9972
查看次数

Java中类的'final'修饰符

我有一个快速而简单的问题.我习惯于让每个班级都"最后",除非当然,它需要由另一个班级延长.

这是一个坏习惯吗?一个好习惯?它甚至重要吗?我理解修饰符对类的影响.

非常感谢提前!

编辑:这是一个示例代码.任何其他类都不会扩展此类.

public final class Application {

    /**
     * Starts the application.
     * 
     * @param arguments arguments provided from command-line
     */
    public static void main(String[] arguments) {
        LaunchUtilities util = new LaunchUtilities(new EventHandler());

        try {
            util.addListener(43594);
        } catch (IOException ioe) {
            Logger.getLogger(Application.class.getName()).log(Level.SEVERE, "Could not bind a port to a listener!", ioe);
        }

        util.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

java final class extend

8
推荐指数
4
解决办法
5635
查看次数

包 - 私有类中的`public`修饰符

最近,我正在编写一个类,我决定将其作为包私有(即没有访问修饰符或默认修饰符).它有一个内部类和一些private辅助方法,以及一个旨在由同一个包中的类使用的方法.所有这些班级成员都是static.但后来我有一个想法:这个方法应该有public访问修饰符还是没有访问修饰符,比如包含它的类?

一方面,由于类本身是包私有的,因此只能在其包中访问和使用它,因此没有实际的理由来制作该方法public.但同时,在语义上,此方法旨在成为类的公共特性,即,旨在外部使用的类的特性,因此修改其访问权限是有意义的.

对于那些喜欢看代码的人,

final class DummyRemover {

    private DummyRemover() {

    }

    public static int remove(Map<String, ClassNode> classMap) {
        return 0;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

要么,

final class DummyRemover {

    private DummyRemover() {

    }

    // Notice the modifier.
    static int remove(Map<String, ClassNode> classMap) {
        return 0;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

这里最好的选择是什么?是否有一个经验法则来决定在这种情况下使用哪些访问修饰符?

java

7
推荐指数
2
解决办法
1036
查看次数

Java:来自class.getResource(...)的NullPointerException

我正在编写一个小应用程序,当我尝试创建一个ImageIcon时,我总是遇到异常.这个例外代码引起了异常:

prayerLevel.setIcon(new ImageIcon(getClass().getResource("/icons/icon_prayer.png")));
Run Code Online (Sandbox Code Playgroud)

现在在我的程序中,文件夹/ icons /确实存在.我不知道它是否有所不同但是类文件在一个包中,其中icons文件夹在项目文件夹中(当你看到bin和src文件夹时).

我已经四处寻找,我找不到可以帮助我解决问题的解决方案.也许你们中的任何人都可以帮忙吗?

编辑:有人要求我的文件夹层次结构:

文件夹层次结构

我知道类文件与图标不在同一个文件夹中,但我已经创建了应用程序,我必须从不同的文件夹加载文件并执行/文件夹/始终用于工作.

编辑2:

System.out.println(getClass().getResource("/icons/icon_prayer.png") == null);
Run Code Online (Sandbox Code Playgroud)

打印真实.

java classpath

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

并行写入标准OutputStream

我正在编写一个应用程序,它涉及将相当大的数据块写入OutputStream(属于Socket).使这有点复杂的是,通常有多个线程试图写入同一个OutputStream.目前,我设计它使得要写入数据的OutputStream在它自己的线程中.该线程包含一个队列(LinkedList),它轮询字节数组并尽快写入它们.

private class OutputStreamWriter implements Runnable {

    private final LinkedList<byte[]> chunkQueue = new LinkedList<byte[]>();

    public void run() {
        OutputStream outputStream = User.this.outputStream;
        while (true) {
            try {
                if (chunkQueue.isEmpty()) {
                    Thread.sleep(100);
                    continue;
                }
                outputStream.write(chunkQueue.poll());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这种设计的问题在于,随着越来越多的写入发生,越来越多的数据排队,并且不会更快地写入.最初,当数据被放入队列时,它几乎立即被写入.然后大约15秒后,数据开始落后; 从数据排队的时间到实际写入数据的时间延迟.随着时间的推移,这种延迟变得越来越长.这是非常明显的.

解决这个问题的一种方法是使用某种ConcurrentOutputStream实现,它允许在不阻塞的情况下发送数据,这样就不会开始备份写入(哎呀,队列就没必要了).我不知道是否有这样的实现 - 我一直找不到 - 我个人认为甚至不可能写一个.

那么,有没有人对我如何重新设计这个有什么建议?

java sockets queue outputstream

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

您何时要使用两个缓存的线程池?

考虑一下Netty教程中的以下示例(尽管这不是我见过的唯一示例):

Executor bossPool = Executors.newCachedThreadPool();
Executor workerPool = Executors.newCachedThreadPool();
ChannelFactory channelFactory = new NioClientSocketChannelFactory(bossPool, workerPool);
Run Code Online (Sandbox Code Playgroud)

在这里创建两个单独的缓存线程池。但为什么?如果多个线程池的大小固定,我可以理解它们的用途,但是高速缓存的线程池不是。那么,如果只拥有一个不断扩展的缓存池,为什么还要拥有多个缓存的线程池呢?实际上,只拥有一个不是更好吗?因为如果您有两个不同的线程提交任务,那么这意味着更可能利用空闲的工作线程。

我对此很疑惑,因为我正在为服务器编写网络,并且正在分别处理UDP和TCP连接。我想将处理任务分派到线程池,并且我正在考虑为此使用缓存的线程池。但是,我不知道该使用一两个。

谢谢。

java multithreading threadpool

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