我的代码存在一些问题,如果你愿意,我需要一些帮助(并解释一下,以便我将来可以理解:)),这是我的代码,我需要的是我的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
答案 0 :(得分:1)
很多事情都在这里跳出来,但是......
将text1
改为JTextField
而不是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");
其他建议......
JFrame
等顶级容器扩展。相反,将您的应用程序基于JPanel
之类的东西。它使您的应用程序灵活且可重复使用。答案 1 :(得分: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中的Text。
我希望这就是你想要做的。如果说得不够好,请告诉我。 ;)