呵呵,你的程序好奇怪, rs.next(),不是在JDBC里的吗,怎么跑到客户端去了

解决方案 »

  1.   

    的确是jdbc里的,我是在客户端先连接到指定的数据库服务器上,然后将一些数据库信息返回到客户端。
      

  2.   

    DataBaseVector初始化能成功加近去嗎﹖我懷疑是new Planet的問題
      

  3.   

    是挺奇怪的,DataBaseVector.addElement(new Planet("abc"));
    执行的成功吗?
      

  4.   

    怎么不用ArrayList??
    你可以System.out把rs.getString(1)大出来看看
      

  5.   

    ClientFrame()方法中初始化的值都加进去了,但运行到DataOpen方法就不行了,DataBaseVector.addElement(new Planet("abc"))和while中的addElement都没有被执行,但是while中的textArea.append(rs.getString(1)+" ")被执行了,且结果正确。如果那位大侠需要,我可以将源码全部贴出(全部代码不到200行),只要能帮我解决问题,谢谢了。
      

  6.   

    这主要是组件没有自动更新功能,你不能根据一个Vector来构造一个JList,然后就向Vector添加元素来让JList自动更新,而应该用ListModel来构造JList,或者直接向JList添加成员,用JList.add()方法,不能自动更新的话,还要调用JList.validate()方法。
    看看书吧,sun有一套介绍swing的教材,还不错,可以打基础,java turtail也可以。
      

  7.   

    菜单的生成和JList的生成是不一样的吧!!!
    他的程序是向Vector里面添加元素。而不是直接向JList
      

  8.   

    可是,在我看来,应该不是组建没有自动更新的问题,因为我在ClientFrame()方法中后来添加的Mercury2、Mercury3、Mercury4都被自动更新了,而再DataOpen()方法中对DataBaseVector的任何操作都不会起作用,相反,列表框也不再对鼠标有响应。
    我用的是jdk1.3,很奇怪的是,我原先用add()方法,编译时居然提示我“add方法为不能解析的符号”,可是查jdk文档是有这个方法的。于是我不得不使用了矢量来构造列表框,文档中有此类构造器JList(Vector listData) 。下面是我的源代码:import java.io.*;
    import java.net.*;
    import java.util.*;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;class Clk_Client
    { public static void main(String[] args)
    {
    JFrame frame=new ClientFrame();
    frame.show();
    }
    }class ClientFrame extends JFrame implements ActionListener
    {   public ClientFrame()
        {   setTitle("客户端");
            setSize(600,480);
    addWindowListener(new WindowAdapter()
                {    public void windowClosing(WindowEvent e)
                    {    System.exit(0);
                    }
                });

    JPanel p=new JPanel();
    ServerLabel =new JLabel("数据源:");
    serverName= new JTextField(10);
    UserLabel= new JLabel("用户名:");
    UserID =new JTextField(10);
    PassWordLabel=new JLabel("密码:");
    PassWord=new JPasswordField(10);
    PassWord.setEchoChar('*');
            startButton =new JButton("连接");
    execButton =new JButton("执行");
    p.add(ServerLabel);
    p.add(serverName);
    p.add(UserLabel);
    p.add(UserID);
    p.add(PassWordLabel);
    p.add(PassWord);
            p.add(startButton);
    p.add(execButton);
            startButton.addActionListener(this);
    execButton.addActionListener(this);
            getContentPane().add(p,"North");

    //DataBaseVector= new Vector();
       DataBaseVector.addElement(new Planet("Mercury1"));
    DataBaseList =new JList(DataBaseVector);
    DataBaseScrollPane=new JScrollPane(DataBaseList);
    DataBaseVector.addElement(new Planet("Mercury2"));
    DataBaseVector.addElement(new Planet("Mercury3"));
    DataBaseVector.addElement(new Planet("Mercury4"));
    TableList =new JList(databases);
    TableScrollPane=new JScrollPane(TableList);
    SqlArea=new JTextArea();
    SqlScrollPane=new JScrollPane(SqlArea);
    textArea=new JTextArea();
            scrollPane=new JScrollPane(textArea);

    JSplitPane innerPane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,TableScrollPane,SqlScrollPane);
    JSplitPane outinnerPane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,DataBaseScrollPane,innerPane);
    JSplitPane outerPane= new JSplitPane(JSplitPane.VERTICAL_SPLIT,outinnerPane, scrollPane);
    //DataBaseList.addListSelectionListener(this);
            
            getContentPane().add(outerPane,"Center");
        } public void actionPerformed(ActionEvent evt)
    { String arg=evt.getActionCommand();
    if (arg.equals("连接"))
    { //System.out.println(PassWord.getPassword().toString());
    DataOpen(serverName.getText(),UserID.getText(),new String(PassWord.getPassword()));
    }
    else if(arg.equals("执行"))
    { System.out.println("执行");
    }
    }

    public void DataOpen(String Sname,String sa,String Pword)
    {
    String url="jdbc:odbc:"+Sname;
    try 
    { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch(java.lang.ClassNotFoundException e) 
    {
    ErrorOutPut("ClassNotFoundException: "+e.getMessage());
    }
    try
    {
    con = DriverManager.getConnection(url,sa,Pword);
    stmt = con.createStatement();
    String query = "select name from master.dbo.sysdatabases";
    ResultSet rs = stmt.executeQuery(query);
    ErrorOutPut("");
    //DataBaseVector.clear();
    DataBaseVector.addElement(new Planet("Mercury5"));
    while (rs.next())
    {
    textArea.append(rs.getString(1)+" ");
    DataBaseVector.addElement(new Planet("Mercury6"));
    }

    catch(SQLException ex) 
    {
    ErrorOutPut("SQLException: " + ex.getMessage());
    }
    }

    public void ErrorOutPut(String error)
    { textArea.replaceRange(error,0,textArea.getText().length());
    }
      private JLabel ServerLabel;
    private JLabel UserLabel;
    private JLabel PassWordLabel;
    private JTextField serverName;
    private JTextField UserID;
    private JPasswordField PassWord;
    private JButton startButton;
    private JButton execButton;
    private JList DataBaseList;
    private Vector DataBaseVector=new Vector();
    private JList TableList;
    private Planet[] databases=
    {  
     new Planet("Mercury"),
             new Planet("Venus"),
             new Planet("Earth"),
             new Planet("Mars"),
             new Planet("Jupiter"),
             new Planet("Saturn"),
             new Planet("Uranus"),
             new Planet("Neptune"),
             new Planet("Pluto"),
          };
        private JScrollPane scrollPane;
        private JScrollPane DataBaseScrollPane;
        private JScrollPane TableScrollPane;
    private JScrollPane SqlScrollPane;
        private JTextArea textArea;
    private JTextArea SqlArea;
    private Connection con=null;
    private Statement stmt=null;
        private ServerHandler ServerOpen;
        private Thread newHandlerThread;
    }class Planet
    {  public Planet(String n)
       {  name = n;
       }   public String toString()
       {  return name;
       }
       private String name;
    }
      

  9.   

    :)
    我同意cherami(cherami)的观点,这的确是组件同步更新的问题……
    在你的程序中,VECTOR的值是肯定改变了的,你可以打印出来看;
    不过当VECTOR更新后,JLIST并不会同步更新,这就是问题所在;
    就你的程序而言,也不用象cherami(cherami)说的那么麻烦,VECTOR的值更新后,执行这句即可:“DataBaseList.setListData(DataBaseVector);”……
      

  10.   

    Thank you ,very very!!!