java-窗口之间信息的传递

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class test1 extends JFrame{
	JTextField textfield1=new JTextField(10);
	JTextField textfield2=new JTextField(10);
	JLabel label1=new JLabel("长");
	JLabel label2=new JLabel("宽");
	JPanel panel1=new JPanel();
	JPanel panel2=new JPanel();
	JPanel panel3=new JPanel();
	ButtonGroup buttongroup1=new ButtonGroup();
	JRadioButton radio1=new JRadioButton("矩形");
	JRadioButton radio2=new JRadioButton("园");
	JButton bt1=new JButton("画");
	int flag=0;
	int location1;
	int location2;
	test1 window1=this;
	test1(){
		Container contain=this.getContentPane();
		this.setSize(150,200);
		this.setVisible(true);
		contain.add(panel1);
		contain.add(panel2);
		contain.add(panel3);
		contain.add(bt1);
		contain.setLayout(new GridLayout(4,1));
		panel1.setLayout(new FlowLayout());
		panel1.add(label1);
		panel1.add(textfield1);
		panel2.setLayout(new FlowLayout());
		panel2.add(label2);
		panel2.add(textfield2);
		panel3.add(radio1);
		panel3.add(radio2);
		buttongroup1.add(radio1);
		buttongroup1.add(radio2);
		panel3.setLayout(new FlowLayout());
		bt1.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				 location1=Integer.parseInt(textfield1.getText());
				 location2=Integer.parseInt(textfield2.getText());
				test2 window2=new test2(window1,flag,location1,location2);
				window2.setSize(150,200);
				window2.setVisible(true);
				setVisible(false);
			} 
 
		}
			);
		radio1.addItemListener(new ItemListener(){
			public void itemStateChanged(ItemEvent e) {
				flag=0;	
			}
			});
		radio2.addItemListener(new ItemListener(){
			public void itemStateChanged(ItemEvent e){
				flag=1;
			}
 		});
		
	}
	public static void main(String args[]){
		new test1();
	}
}

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class test2 extends JFrame{
	JButton jb1=new JButton("返回");
	test1 window1;
	JPanel jp1;
	int flag,location1,location2;
	test2(test1 window,int flag1,int lo1,int lo2){
		window1=window;
		flag=flag1;
		location1=lo1;
		location2=lo2;
		 Container contain=this.getContentPane();
		 contain.add(jb1,"North");
		 if (flag==0)
		 	jp1=new draw_Rec(location1,location2);
		 else
		     jp1=new draw_Oval(location1,location2);
		 contain.add(jp1,"Center");
		 jb1.addActionListener(new ActionListener(){
		 	public void actionPerformed(ActionEvent e){
		 		dispose();
		 		window1.show();
		 	}
		 	});
	}
}


class draw_Rec extends JPanel{
	int a,b;
	public draw_Rec(int a,int b){
		this.a=a;this.b=b;
	}
	public void paint(Graphics g){
		super.paintComponents(g);
		g.setColor(Color.red);
		g.fillRect(a,b,100,100);
	}
}
class draw_Oval extends JPanel{
	int a,b;
	public draw_Oval(int a,int b){
		this.a=a;this.b=b;
	}
	public void paint(Graphics g){
		super.paintComponents(g);
		g.setColor(Color.red);
		g.drawOval(a,b,100,100);
	}
}


<think>好的,我需要回答用户关于如何在命令行窗口中执行Java JAR文件的问题。首先,用户想知道如何运行`java -jar`命令来执行JAR文件。我应该按照步骤详细说明。 首先,确保Java环境已经安装。用户可能需要验证Java是否正确安装,可以通过在命令行输入`java -version`来检查。这一步很重要,如果Java没安装或者环境变量没配置好,后面的步骤就无法执行。 接下来,基本命令结构是`java -jar 文件名.jar`。比如运行`HelloWorld.jar`,命令就是`java -jar HelloWorld.jar`。这里要注意JAR文件的位置,如果不在当前目录,需要指定完整路径,比如`java -jar /path/to/HelloWorld.jar`。这部分需要详细说明路径的问题,避免用户遇到文件找不到的错误。 然后,用户可能需要传递参数给main方法。这时候命令应该是`java -jar 文件名.jar 参数1 参数2 ...`。例如`java -jar MyApp.jar arg1 arg2`。这里要强调参数之间用空格分隔,参数会被传递到main方法的args数组中。 另外,用户可能遇到需要指定编码的情况,比如处理中文字符时出现乱码。这时候可以用`-Dfile.encoding`选项,如`java -Dfile.encoding=utf-8 -jar xxx.jar`。引用中的资料提到这一点,需要引用[^3]。 如果希望在后台运行JAR文件,不同操作系统有不同方法。Windows可以使用`start javaw -jar 文件名.jar`,而Linux/Mac可以用`nohup java -jar 文件名.jar &`。这里要注意区分系统,并且解释`javaw`和`nohup`的作用,避免用户混淆。引用中的资料提到Windows下的`start`命令,引用[^2]和[^4]提到后台运行的问题。 还要提到如何查看实时日志,保持命令行窗口打开,或者使用`tail -f nohup.out`在Linux/Mac下跟踪日志。这部分帮助用户调试和监控应用运行情况。 最后,注意事项部分需要强调JAR必须是可执行的,即MANIFEST.MF中指定了Main-Class。如果遇到问题,可能需要检查JAR文件结构是否正确。同时,运行后如果想执行其他命令,需要保持窗口打开,或者使用后台运行的方法。引用[^1]提到JAR文件结构和MANIFEST.MF的重要性,需要引用。 可能用户会遇到的问题包括路径错误、编码问题、后台运行需求等,需要一一覆盖。同时,要确保引用正确,每个引用的内容对应到参考资料中的部分。 现在,整理这些步骤,按照逻辑顺序,分点说明,确保每个步骤清晰,并正确添加引用标记。同时,生成的相关问题需要围绕Java命令执行、参数传递、编码处理、后台运行等方面,帮助用户扩展了解。</think>### 如何在命令行窗口中执行Java JAR文件? 以下是详细步骤说明: --- #### **1. 确认Java环境已安装** - 在命令行输入以下命令,验证Java是否安装: ```bash java -version ``` 若显示版本信息(如`java version "17.0.5"`),则说明已安装;否则需先安装Java环境。 --- #### **2. 基本命令格式** - 执行JAR文件的通用命令为: ```bash java -jar 文件名.jar ``` **示例**:运行`HelloWorld.jar`: ```bash java -jar HelloWorld.jar ``` - 若JAR文件不在当前目录,需指定完整路径: ```bash java -jar /path/to/HelloWorld.jar ``` --- #### **3. 传递参数给main方法** - 若JAR程序需要外部参数,格式为: ```bash java -jar 文件名.jar 参数1 参数2 ... ``` **示例**: ```bash java -jar MyApp.jar arg1 arg2 ``` - 参数会传递给`main(String[] args)`中的`args`数组[^5]。 --- #### **4. 处理编码问题** - 若输出乱码(如中文字符),需指定编码格式: ```bash java -Dfile.encoding=utf-8 -jar xxx.jar ``` 此命令强制使用UTF-8编码。 --- #### **5. 后台运行JAR文件** - **Windows**: ```bash start javaw -jar 文件名.jar ``` - `start`会新开窗口运行,`javaw`不显示控制台(适合GUI应用)[^4]。 - **Linux/Mac**: ```bash nohup java -jar 文件名.jar & ``` - `nohup`防止进程终止,`&`表示后台运行。 --- #### **6. 查看实时日志** - 若需查看输出日志: - **直接运行**:保持命令行窗口不关闭。 - **Linux/Mac**:使用`tail -f nohup.out`追踪日志。 --- #### **注意事项** 1. **可执行JAR要求**:JAR文件的`MANIFEST.MF`中需指定`Main-Class`,否则需通过`-cp`指定主类。 2. **命令行交互**:直接运行`java -jar`会占用当前终端;若需执行其他命令,建议使用后台运行方式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值