首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么剪贴板监听器使用更多的CPU?

为什么剪贴板监听器使用更多的CPU?
EN

Stack Overflow用户
提问于 2012-09-16 02:59:33
回答 1查看 308关注 0票数 3

我写了监听剪贴板的程序,工作正常,但我看到程序使用了更多的CPU。CPU使用率超过70%。为什么?我可以减少它吗?或者我想要侦听windows的复制操作的侦听程序。在java中有监听器来做这个吗?这是我的代码:

代码语言:javascript
复制
    package yoxlama;


    import java.awt.*;  
    import java.awt.datatransfer.*;  
    import java.io.IOException;
    import java.net.MalformedURLException;

    class ClipBoardListener extends Thread implements ClipboardOwner {  
      Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();  
      static ClipBoardListener b;

      Interlsoft interlsoft = new Interlsoft();
      public void run() {  
          try{
            Transferable trans = sysClip.getContents(this);  
            regainOwnership(trans);
          }catch (Exception e) {
                try {
                    b.finalize();
                } catch (Throwable e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                 b= new ClipBoardListener();
                 b.start();
              System.out.println("NESE1");
        }
        System.out.println("Listening to board...");  
        while(true) {}  
      }  

      public void lostOwnership(Clipboard c, Transferable t) {  
          try {  
                Thread.sleep(50);  
              } catch(Exception e) {  
                System.out.println("Exception: " + e);  
              } 
          try{
              Transferable contents = sysClip.getContents(this);  
              processContents(contents);  
              regainOwnership(contents); 
          }catch (Exception e) {
              try {
                  b.finalize();
                 b= new ClipBoardListener();
                 b.start();
            } catch (Throwable e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
              System.out.println("nese");
        }
      }  

      void processContents(Transferable t) throws MalformedURLException, IOException {  
          String str = getClipboard(t);
          if(str!=null){
            str=  str.replace("\n", "%0D%0A");
            str=  str.replace("\r", "");
            str=  str.replace("\t", "");
            str=  str.replace("/", "");
            str=  str.replace("-", "");
              interlsoft.translate(str);

          }
     //   System.out.println("Processing: " + getClipboard(t));  

      }  

      void regainOwnership(Transferable t) {  
        sysClip.setContents(t, this);  
      }  

      public static void main(String[] args) {  
          b = new ClipBoardListener();  
        b.start();  
      }  

      public static String getClipboard(Transferable t) {
          //  Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);

            try {
                if (t != null && t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                    String text = (String)t.getTransferData(DataFlavor.stringFlavor);
                    return text;
                }
            } catch (UnsupportedFlavorException e) {
                System.out.println("BURDA1");
            } catch (IOException e) {
                System.out.println("BURDA1");
            }
            return null;
        }
    }  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-16 03:01:58

这个:while(true) {}

你可怜的CPU。只需让线程无限期休眠,而不是while true。请参阅:How do you hang a thread in Java in one line?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12440177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档