0

別のクラスからクラスのグローバル変数にアクセスしようとしていますが、アクションの実行中にガラスが値を入力する代わりにnull値を与えています`

package com.audit;

    public class panel extends JPanel {
     String shost;
     String suser;
     String spass;
     int sport;
     public int getsport() {
           return this.sport;
        }
     public String getshost() {
           return this.shost;
        }
     public String getsuser() {
           return this.suser;
        }
     public String getspass() {
           return this.spass;
        }
    public panel(){
        Dimension size = getPreferredSize();
        size.width = 680;
        size.height = 600;
        setPreferredSize(size);
        setBorder(BorderFactory.createTitledBorder("Linux Audit"));
        setLayout(new GridBagLayout());
        GridBagConstraints gc = new GridBagConstraints();


        JLabel labelhost = new JLabel("Host    ");
        JLabel labeluser = new JLabel("User name    ");
        JLabel labelpass = new JLabel("Password    ");
        JLabel labelport = new JLabel("Port    ");
        final JTextField host = new JTextField(15);
        final JTextField user = new JTextField(15);
        final JTextField pass=(JTextField)new JPasswordField(15);
        final JTextField port = new JTextField(15);
        final JButton start = new JButton("Start Audit");
        //layout design
        gc.anchor = GridBagConstraints.LINE_END;
        gc.weightx = 0.5;
        gc.weighty = 0.5;
        gc.gridx=0;
        gc.gridy=0;
        add(labelhost,gc);
        gc.gridx=0;
        gc.gridy=1;
        add(labeluser,gc);
        gc.gridx=0;
        gc.gridy=2;
        add(labelpass,gc);
        gc.gridx=0;
        gc.gridy=3;
        add(labelport,gc);
        gc.anchor = GridBagConstraints.LINE_START;
        gc.gridx=1;
        gc.gridy=0;
        add(host,gc);
        gc.gridx=1;
        gc.gridy=1;
        add(user,gc);
        gc.gridx=1;
        gc.gridy=2;
        add(pass,gc);
        gc.gridx=1;
        gc.gridy=3;
        add(port,gc);
        gc.anchor = GridBagConstraints.FIRST_LINE_START;
        gc.weighty=10;
        gc.gridx=1;
        gc.gridy=4;
        add(start,gc);
        //startaudit action

    start.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {

                String shost = host.getText();
                String suser = user.getText();
                String spass = pass.getText();
                String sportb = port.getText();
                int sport = Integer.parseInt(sportb);

                sshConnection s = new sshConnection();
                s.Connection();
                /*System.out.println(shost);
                System.out.println(suser);
                System.out.println(spass);
                System.out.println(sport);*/

            }


        });


    }

}

上記で、グローバル変数の値をフェッチしようとしています

 String shost;
 String suser;
 String spass;
 int sport; 

別のクラスで

///another class

public class sshConnection {

    public void Connection(){
         String sshhost = new panel().getshost();
         String sshuser = new panel().getsuser();
         int sshport = new panel().getsport();
         String sshpass = new panel().getspass();
         System.out.println(sshhost);
         System.out.println(sshuser);
         System.out.println(sshport);
         System.out.println(sshpass);
    }
}

実行時に挿入された値ではなくnull値を取得しています。問題を解決してください。非常に基本的なことは知っていますが、初心者です。

4

2 に答える 2

0

フィールドがpanelであるの複数のインスタンスを作成しています。sshConnection#Connectionnull

の既存のインスタンスの値をpanel使用する必要があります。代わりに、単にパラメーターとして渡すことをお勧めします

public void performConnection(String sshHost, String sshUser, int sshPort, String sshPass){
 ...
}

Java の命名規則では、クラスは大文字で始まります。たとえばSshConnection、メソッドは小文字で始まりperformConnectionます。命名規則を読む

于 2013-09-13T23:31:38.617 に答える
0

panelクラスでは、shostsuserなどは、[監査の開始] ボタンをクリックするまで何も設定されません。しかし、4 つの新しいオブジェクトConnectionを構築します。これらは、ボタンをクリックしたオブジェクトとは異なります。あなたがやりたいことは、引数を取るように Connection メソッドを変更することだと思います: panelpanelpanel

public void Connection(panel p){
    String sshhost = p.getshost();
    String sshuser = p.getsuser();
    ...

s.Connectionリスナー内の呼び出しを次のように変更します

s.Connection (panel.this);

そうすれば、何を扱うべきかがConnectionわかります。panel

Connectionまたは、より良い設計は、3 つの文字列と整数を引数として取り、 などをまったく気にしないことかもしれませんgetshost()

于 2013-09-13T23:33:59.423 に答える