今天测试了一下教材上的代码,发现在Fangting.java中用new调用不同的类有的不能成功
//Fangting.java
import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class Fangting extends JFrame
{
public Fangting()
{
super("方挺的菜单设计");JMenuBar ft=new JMenuBar();setJMenuBar(ft);
JMenu []m={new JMenu("文件(A)"),new JMenu("编辑(B)"),new JMenu("聊天(D)")};
char [][] mc={{'A','B','D'},{'O','S','F'},{'C','V'},{'M','N'}};
JMenuItem [][]my={
{new JMenuItem("打开(O)"),new JMenuItem("保存(S)"), new JMenuItem("退出(F)")},
{new JMenuItem("复制(C)"),new JMenuItem("粘贴(V)")},
{new JMenuItem("开始聊天(M)"),new JMenuItem("停止聊天(N)")}};
int i,j;for(i=0;i<m.length;i++)
{ft.add(m[i]);m[i].setMnemonic(mc[0][i]);for(j=0;j<my[i].length;j++)
{m[i].add(my[i][j]);my[i][j].setMnemonic(mc[i+1][j]);
my[i][j].setAccelerator(KeyStroke.getKeyStroke("ctrl"+mc[i+1][j]));
my[i][j].addActionListener( new ActionListener()
  {public void actionPerformed(ActionEvent e)
                     {JMenuItem mytem=(JMenuItem)e.getSource();
System.out.println("运行菜单项:"+mytem.getText());
if(mytem.getText()=="退出(F)")
{new Lal_but( );//new J_ChatClient( );//new MouseDraw( ); };}});}}
m[0].insertSeparator(1);}
public static void main(String args[])
{JFrame app=new Fangting();
                 app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(250,120);app.setVisible(true);}}
//MouseDraw.java:
import java.awt.*;import java.awt.event.*;
public class MouseDraw{public static void main(String[] args)
  { MouseFrame frame=new MouseFrame();
    frame.addWindowListener(new Wadapt());
    frame.setVisible(true);}}
class MouseFrame extends Frame
{  public MouseFrame()
    { setTitle("利用鼠标绘图");setSize(300,300);
      MousePanel panel=new MousePanel();add(panel);}}
class MousePanel extends Panel implements MouseListener,MouseMotionListener
{   private int x,y,start_X,start_Y,old_X,old_Y;
    private boolean draw;
    public MousePanel()
    {addMouseListener(this);addMouseMotionListener(this);
    public void mousePressed(MouseEvent evt)
    {start_X=evt.getX();start_Y=evt.getY();draw=false;}
    public void mouseReleased(MouseEvent evt){}
    public void mouseClicked(MouseEvent evt){}
    public void mouseEntered(MouseEvent evt)
    {setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));}
    public void mouseExited(MouseEvent evt)
    {setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));}
    public void mouseDragged(MouseEvent evt)
    {x=evt.getX();y=evt.getY();repaint();}
    public void mouseMoved(MouseEvent evt){}
    public void update(Graphics g)
    {paint(g);}
    public void paint(Graphics g)
    {if(!draw){old_X=x;old_Y=y;draw=true;}
        else
        {g.setColor(getBackground());g.drawLine(start_X,start_Y,old_X,old_Y);
         old_X=x;old_Y=y;}
        g.setColor(getForeground());g.drawLine(start_X,start_Y,x,y);}}
class Wadapt extends WindowAdapter
{public void windowClosing(WindowEvent evt)
    {Frame frm=(Frame)evt.getSource();frm.setVisible(false);
     frm.dispose();System.exit(0);}}//Lal_but.java:
import javax.swing.*;import java.awt.*;import java.awt.event.*;
public class Lal_but extends JFrame {
   private JLabel label1,label2;private JButton but1,but2;
   public Lal_but(){super("标签和按钮测试窗口");
    Container c=getContentPane();         
    c.setLayout(new FlowLayout(100,100,10)); 
    Icon icon=new ImageIcon("125.gif");     
    label1=new JLabel("标签中有文字和图像",icon,SwingConstants.CENTER); 
    label1.setToolTipText("这是标签" );   
    label1.setHorizontalTextPosition(SwingConstants.CENTER);  
    label1.setVerticalTextPosition(SwingConstants.BOTTOM );c.add(label1); 
    Icon icon1=new ImageIcon("");Icon icon2=new ImageIcon("");                
    Icon icon3=new ImageIcon("");but1=new JButton("按钮1");        
    c.add(but1); but2=new JButton("按钮2",icon2);  
    but2.setRolloverIcon(icon3);c.add(but2);
    but1.addActionListener(new listener()); 
    but2.addActionListener(new listener());
    setSize(360,200 );setVisible(true);} 
    public static void main(String args[]){ 
      Lal_but app = new Lal_but();app.addWindowListener(
        new WindowAdapter(){public void windowClosing(WindowEvent e)
         {System.exit( 0 ); }});}
   private class listener implements ActionListener{ 
    public void actionPerformed( ActionEvent e ){
       JOptionPane.showMessageDialog( null,"You pressed:"+e.getActionCommand());
      }  }} 
//J_ChatClient.java:
import java.awt.*;import java.awt.event.*;
import java.net.Socket;import java.io.*;
import javax.swing.*;
public class J_ChatClient extends JFrame
{private ObjectInputStream m_input;private ObjectOutputStream m_output; 
 private JTextField m_enter;private JTextArea m_display;
  public J_ChatClient( ) 
    {super("聊天程序客户端");Container c = getContentPane( );
     m_enter = new JTextField( );m_enter.setEnabled( false );
     m_enter.addActionListener(new ActionListener( )
     {public void actionPerformed( ActionEvent event )
        { try{String s = event.getActionCommand( );
            m_output.writeObject( s );m_output.flush( );
            mb_displayAppend( "客户端: " + s );m_enter.setText( "" );}
          catch (Exception e)
            {System.err.println("发生异常:" + e);e.printStackTrace( );
            }} }); 
        c.add( m_enter, BorderLayout.NORTH );
        m_display = new JTextArea( );
        c.add( new JScrollPane( m_display ), BorderLayout.CENTER );} 
    public void mb_displayAppend( String s )
    {m_display.append( s + "\n" );
     m_display.setCaretPosition( m_display.getText( ).length( ) );
     m_enter.requestFocusInWindow( );} 
    public boolean mb_isEndSession( String m )
    {if (m.equalsIgnoreCase("q"))
       return(true);
     if (m.equalsIgnoreCase("quit"))
       return(true);
     if (m.equalsIgnoreCase("exit"))
       return(true);
     if (m.equalsIgnoreCase("end"))
       return(true);
     if (m.equalsIgnoreCase("结束"))
       return(true);
       return(false);
    }
  public void mb_run( String host, int port)
    {try{mb_displayAppend("尝试连接");
         Socket s = new Socket(host, port);String m; 
         m_output = new ObjectOutputStream( s.getOutputStream( ) );
         m_input = new ObjectInputStream( s.getInputStream( ) );
         m_enter.setEnabled( true );
         do{m = (String) m_input.readObject( );
            mb_displayAppend("服务器端: " + m);
            } while(!mb_isEndSession( m 
            m_output.writeObject("q");m_output.flush( );
            m_output.close( );m_input.close( );s.close( );
            System.exit( 0 );}
        catch (Exception e)
        {System.err.println("发生异常:" + e);e.printStackTrace( );
         mb_displayAppend("发生异常");}  } 
     public static void main(String args[ ]){
        J_ChatClient app = new J_ChatClient( );
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        app.setSize(350, 150);app.setVisible(true);
        if ( args.length == 0 )
            app.mb_run("localhost", 5000);
        else app.mb_run(args[0], 5000);}} 只有Lal_but.java被成功调用。请详细指点。

解决方案 »

  1.   

    你只是new一下获取其实例,并未调用该实例的什么方法吧. 
    太长了没细看..
      

  2.   

    没有成功调用是说没有达到你想要的效果?
    是你的程序写的有问题,和new没有关系
      

  3.   

    你直接new JFrame();结果什么都看不到,不代表jframe这个类写的有问题,因为你只是创建了一个对象,没有调用它的相关方法,当让有时构造函数里也做了一些动作,所以你觉得new调用成功
      

  4.   


    J_ChatClient,MouseDraw
    代码有问题
    调试一下吧
      

  5.   

    用new调用不同的类有的不能成功 
    你怎么判断它没有成功的?
      

  6.   

    看了一下红色的代码。new一下只是实例化,可以理解为调用了该类的构造方法。在你的代码中实际上运行了
    public Lal_but(){super("标签和按钮测试窗口"); 
        Container c=getContentPane();        
        c.setLayout(new FlowLayout(100,100,10)); 
        Icon icon=new ImageIcon("125.gif");    
        label1=new JLabel("标签中有文字和图像",icon,SwingConstants.CENTER); 
        label1.setToolTipText("这是标签" );  
        label1.setHorizontalTextPosition(SwingConstants.CENTER);  
        label1.setVerticalTextPosition(SwingConstants.BOTTOM );c.add(label1); 
        Icon icon1=new ImageIcon("");Icon icon2=new ImageIcon("");                
        Icon icon3=new ImageIcon("");but1=new JButton("按钮1");        
        c.add(but1); but2=new JButton("按钮2",icon2);  
        but2.setRolloverIcon(icon3);c.add(but2); 
        but1.addActionListener(new listener()); 
        but2.addActionListener(new listener()); 
        setSize(360,200 );setVisible(true);} 
    这段代码
    因为你的Lal_but 继承了 JFrame,在构造方法中有setVisible(true)方法,所以可以显示出结果,但是你同时要注意到,你只是new Lal_but(),并没有创建对象,也就是没有一个对象来代表你的结果。你再创建一个Lal_but 对象=new Lal_but();来接受该类的实例化,就可以看见结果了
      

  7.   

    new只是调用类呀,没有具体的实现方法呀!俺是菜鸟,只能说这么多!!!!