【问题标题】:boolean method canPaste() does not return false even when the condition is satisfied [closed]即使满足条件,布尔方法 canPaste() 也不返回 false [关闭]
【发布时间】:2016-01-16 17:53:58
【问题描述】:

当 String cpbtxt 为 null 时,该方法应该返回 false,但它不返回任何内容。请帮助。没有错误。我什至尝试过“cpbtxt.equals()”但仍然没有运气。请告诉我我哪里出错了?完整代码如下:

import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.undo.*;
import javax.swing.text.*;

class Sample extends JFrame implements MenuListener
{
JMenuBar mb;
JMenu em;
JMenuItem paste;
JTextArea t;
public Sample()
{
    setLayout(new BorderLayout());
    setSize(400,400);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    mb = new JMenuBar();
    em = new JMenu("Edit");
    paste = new JMenuItem("Paste");

    add(mb,BorderLayout.NORTH);
    mb.add(em);
    em.add(paste);
    em.addMenuListener(this);

    t = new JTextArea();
    add(t,BorderLayout.CENTER);
}

public boolean canPaste() throws Exception
{
    Clipboard cpb = Toolkit.getDefaultToolkit().getSystemClipboard();
    String cpbtxt = (String)cpb.getData(DataFlavor.stringFlavor);
    if(cpbtxt == null)
        return false;
    else
        return true;
}

public void menuSelected(MenuEvent me)
{
    if(me.getSource() == em)
    {
        try {
        paste.setEnabled(canPaste());
        } catch(Exception e) { System.out.println(e); }
    }
}
public void menuDeselected(MenuEvent me)
  {
  }
public void menuCanceled(MenuEvent me)
  {
  }
}

class samplemain
{
public static void main(String[]args)
   {
    Sample s1 = new Sample();
    s1.setVisible(true);
   }
}

【问题讨论】:

  • “但它不返回任何东西”我无法重现这种行为。请提供最小但完整的示例(SSCCE / MCVE)。
  • 也许你不应该接受这个例外。
  • em 是同一个类的 JMenu。

标签: java methods boolean clipboard paste


【解决方案1】:

像这样更改您的 menuSelected 方法:

public void menuSelected(MenuEvent me) {
    if(me.getSource() == em) {
        boolean canPasteResult = false;
        try {
            canPasteResult = canPaste();
        } catch(Exception e) { System.out.println(e); }
        paste.setEnabled(canPasteResult);
    }
}

使用您的代码,如果您的 canPaste 方法抛出异常(例如,如果您在剪贴板中选择了一个文件),则此方法不会更改 menuItem 的 enabled 状态。
使用我的代码,这种情况将导致禁用状态。

【讨论】:

  • 这行得通!非常感谢!
【解决方案2】:

也许是因为它从不 null。试试这个:

if(cpbtxt == null || cpbtxt.equals("")) {
    return false;
}
else {
    return true;
}

【讨论】:

  • 感谢您的回复,但我已经尝试过了。它也不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
相关资源
最近更新 更多