相关疑难解决方法(0)

如何从Java中删除文件中的换行符?

如何在Java中替换字符串中的所有换行符,以便在Windows和Linux上工作(即没有特定于OS的回车/换行/换行等问题)?

我试过了(注意readFileAsString是一个将文本文件读入String的函数):

String text = readFileAsString("textfile.txt");
text.replace("\n", "");
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.

如何才能做到这一点?

java string newline line-breaks

247
推荐指数
8
解决办法
48万
查看次数

如何使用SwingWorker模拟缓冲的外围设备?

我正在使用这个练习作为教学工具来帮助我学习一些Java GUI编程概念.我正在寻找的是一般性的理解,而不是一个特定问题的详细解决方案.我希望编码这个"正确"将教会我如何处理未来的多线程问题.如果这对于这个论坛来说太笼统了,那么它可能属于程序员吗?

我正在模拟读卡器.它有一个GUI,允许我们将卡加载到料斗中并按下Start等,但它的主要"客户端"是CPU,在单独的线程上运行并请求卡.

读卡器保持单个缓冲区.如果卡片请求进入且缓冲区为空,读卡器必须从料斗读取卡片(需要1/4秒,这是1962年).在将卡读入缓冲区后,读卡器将缓冲区发送到CPU,并在下一个请求之前立即启动另一个缓冲区加载操作.

如果不仅缓冲器是空的,而且料斗中没有卡,那么我们必须等到操作员将料斗放入料斗并按下Start(它始终启动缓冲加载操作).

在我的实现中,卡请求以invokeLater() Runnables在EDT上排队的形式发送到读卡器.在myRunnable.run()时间,无论是一个缓冲器将可用(在这种情况下,我们可以将其发送到CPU和开球另一个缓冲器负载操作),或缓冲区将是空的.如果它是空的怎么办?

两种可能性:(a)飞行中已经有缓冲加载操作,或(b)卡漏斗是空的(或尚未启动).在任何一种情况下,让EDT等待是不可接受的.工作(和等待)必须在后台线程上完成.

为了简单起见,我尝试生成一个SwingWorker来响应每个卡请求,而不管缓冲区的状态如何.伪代码是:

SwingWorker worker = new SwingWorker<Void, Void>() {
    public Void doInBackground() throws Exception {
        if (buffer.isEmpty()) {
            /*
             * fill() takes 1/4 second (simulated by Thread.sleep)
             * or possibly minutes if we need to have another 
             * card deck mounted by operator.
             */
            buffer.fill();
        }
        Card card = buffer.get(); // empties buffer
        /*
         * Send card to CPU
         */
        CPU.sendMessage(card); // <== (A) put card in msg queue …
Run Code Online (Sandbox Code Playgroud)

java concurrency swing buffering swingworker

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

摆动计时器:不要依赖摆动计时器.问题标记; 和并发问题

第一件事让我感到震惊:System.currentTimeMillis()我认为非常准确,给出一个long值,以及在哪里作为参数的SwingTimers请求int; 这是什么意思?不要认为SwingTimers准确吗?

2)假设一个字的定时SwingTimer需要x毫秒; 如果我们重复一项任务(突出显示单词,如卡拉OK应用程序),我会包含以下代码:

               /*see the time taken for each letter*/                    
                 int tik=(int) delay / words[index].length();
 /* make adjustment(subtract few millisecs)  as per the time taken by each word*/
                   if(tik <69)
                    timer.setDelay((int) (delay / words[index].length())-3);
                   if(tik >=69&&tik<=149)
                    timer.setDelay((int) (delay / words[index].length())-6);
                   else if(tik <=150)
                       timer.setDelay((int) (delay / words[index].length())-9);
                   else if(tik >150)
                   timer.setDelay((int) (delay / words[index].length())-100);
Run Code Online (Sandbox Code Playgroud)

工作安静很好,但我绝对肯定我不能依赖这个,因为时间,长度可能会改变!如何克服这个问题?因为几毫秒的变化可能给我带来灾难性的后果.

3)同时我想知道卡拉OK制造商和播放器软件遵循哪种技术???,非常准确.

java swing timer

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