0

我的代码有一些问题,如果您可以的话,我需要一些帮助(并解释一下,以便我将来能理解:)),所以这是我的代码,我需要的是我的 JButton 来执行关闭命令和关闭命令从我在 JTextfield 中输入的秒数开始延迟。所以到目前为止我的代码是:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;


public class Shutdown extends JFrame{
    InputStream text1;
    JButton start;
    String shutdownCmd;

        public Shutdown() {

        this.setTitle("Shutdown When you want");
        setSize(300, 150);
        setResizable(false);
        setLocation(370, 150);
        setLayout(null);

        JLabel desc1 = new JLabel("Time until shutdown : ");
        desc1.setBounds(95, 25, 125, 25);
        add(desc1);

        JTextField text1 = new JTextField();
        text1.setBounds(95, 45, 120, 25);
        text1.setForeground(Color.BLACK);
        text1.setToolTipText("Introdu textu aici");
        add(text1);

        JButton start = new JButton("Start Shudown");
        start.setBounds(95, 75, 120, 25);
        add(start);



        ActionListener eventstart = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO auto- generated method
                String actionstart = arg0.getActionCommand();
                if(actionstart.equals("Start Shudown")){
                    try {
                        ShutdownCmd();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

                }

        }; 
        start.addActionListener(eventstart);
}       
        public void ShutdownCmd() throws IOException{
     Runtime runtime = Runtime.getRuntime();
     BufferedReader br=new BufferedReader(new InputStreamReader(text1));
     long a=Long.parseLong(br.readLine());
     Process proc = runtime.exec("shutdown -s -t "+a);
     System.exit(0);
}
}

谢谢您或高级的帮助!:D

4

2 回答 2

1

很多事情都在我这里跳出来,但是......

重新声明text1JTextField而不是InputStream...

//InputStream text1;
private JTextField text1;

这将允许您从类中的任何位置访问该字段及其值。

确保在创建文本字段时没有隐藏变量...

//JTextField text1 = new JTextField();
text1 = new JTextField(10);

使用ProcessBuilder代替Runtime.getRuntime()。更好地处理参数将使您的生活更轻松

ProcessBuilder pb = new ProcessBuilder("shutdown", "-s", "-t", text1.getText());
pb.redirectError();
Process p = pb.start();

动作命令将永远是null你从未设置过的,所以下面会导致你NullPointerException

String actionstart = arg0.getActionCommand();
if(actionstart.equals("Start Shudown")){

创建按钮时,您需要设置操作命令...

JButton start = new JButton("Start Shudown");
start.setActionCommand("Start Shudown");

其他建议...

  • 使用适当的布局管理器。即使在同一个操作系统上,您的应用程序也可能需要处理不同的屏幕分辨率、DPI、字体等......
  • 避免直接从顶级容器(如JFrame. 相反,您的应用程序应基于JPanel. 它使您的应用程序灵活且可重复使用。
于 2013-07-05T10:39:24.223 回答
0

您需要做的就是使 JTextField 成为一个字段:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;


public class Shutdown extends JFrame{
    JTextField text1;
    JButton start;
    String shutdownCmd;

        public Shutdown() {

        this.setTitle("Shutdown When you want");
        setSize(300, 150);
        setResizable(false);
        setLocation(370, 150);
        setLayout(null);

        JLabel desc1 = new JLabel("Time until shutdown : ");
        desc1.setBounds(95, 25, 125, 25);
        add(desc1);

        text1 = new JTextField();
        text1.setBounds(95, 45, 120, 25);
        text1.setForeground(Color.BLACK);
        text1.setToolTipText("Introdu textu aici");
        add(text1);

        JButton start = new JButton("Start Shudown");
        start.setBounds(95, 75, 120, 25);
        add(start);



        ActionListener eventstart = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO auto- generated method
                String actionstart = arg0.getActionCommand();
                if(actionstart.equals("Start Shudown")){
                    try {
                        ShutdownCmd();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

                }

        }; 
        start.addActionListener(eventstart);
}       
        public void ShutdownCmd() throws IOException{
            Runtime runtime = Runtime.getRuntime();

            long a=Long.parseLong(text1.getText());
            Process proc = runtime.exec("shutdown -s -t "+a);
            System.exit(0);
        }
}

如果它是全局的,您可以在该对象的任何函数中使用它,这样您就可以从 JFrame 对象内的任何地方从 textField 中获取文本。

我希望这是你想做的。如果解释得不够清楚,请告诉我。;)

于 2013-07-05T10:24:51.923 回答