布尔方法 canPaste() 即使满足条件也不会 return false
boolean method canPaste() does not return false even when the condition is satisfied
当字符串 cpbtxt 为 null 时,该方法应该 return false 但它没有 return anything.Please 帮助。没有错误。我什至试过 "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);
}
}
可能是因为它永远不会 null。试试这个:
if(cpbtxt == null || cpbtxt.equals("")) {
return false;
}
else {
return true;
}
像这样更改您的 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
状态。
使用我的代码,这种情况将导致禁用状态。
当字符串 cpbtxt 为 null 时,该方法应该 return false 但它没有 return anything.Please 帮助。没有错误。我什至试过 "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);
}
}
可能是因为它永远不会 null。试试这个:
if(cpbtxt == null || cpbtxt.equals("")) {
return false;
}
else {
return true;
}
像这样更改您的 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
状态。
使用我的代码,这种情况将导致禁用状态。