JAVA 窗口间数据传送
发布网友
发布时间:2024-04-14 15:24
我来回答
共5个回答
热心网友
时间:2024-05-14 01:39
可以设置一个公共类,然后进行存和取就行了啊,下面我写的一个你看下,代码很乱:
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.URL;
import java.util.Arrays;
import jpcap.JpcapCaptor;
import jpcap.JpcapSender;
import jpcap.NetworkInterface;
import jpcap.NetworkInterfaceAddress;
import jpcap.packet.EthernetPacket;
import jpcap.packet.Packet;
public class Common
{
public static int deviceindex=1;
public static NetworkInterface device[]=null;
public static NetworkInterface devices=null;
public static JpcapCaptor captor=null;
public static InetAddress thisIP=null;
public static byte[] thismac=null;
public static byte[] gwmac=null;
public static InetAddress srcIP=null;
public static InetAddress dstIP=null;
public static int scannum=2;
public static void initipmac(){
device=JpcapCaptor.getDeviceList();
for(int i=0;i<device.length;i++)
{
for (NetworkInterfaceAddress a : device[i].addresses)
{
if(a.address instanceof Inet4Address)
{thisIP=a.address; deviceindex=i;}
}
}
thismac=device[deviceindex].mac_address;
}
public static void initgwmac(){
try{
devices=JpcapCaptor.getDeviceList()[0];
captor=JpcapCaptor.openDevice(devices,65535,false,20);
captor.setFilter("tcp and dst host "+InetAddress.getByName("www.microsoft.com").getHostAddress(),true);
}
catch(Exception e){System.out.println("catch an error");}
while(true){
try{new URL("http://www.microsoft.com").openStream().close();}catch(Exception e){}
Packet ping=captor.getPacket();
if(ping==null){
System.out.println("cannot obtain MAC address of default gateway.");
break;
}else if(Arrays.equals(((EthernetPacket)ping.datalink).dst_mac,devices.mac_address))
continue;
gwmac=((EthernetPacket)ping.datalink).dst_mac;
break;
}
}
public static void set3c(InetAddress c1,InetAddress c2,int c3){
srcIP=c1;
dstIP=c2;
scannum=c3;
}
public static byte[] strtomac(String ipAddress)
{
String[] ip=new String[6];
int[] pos=new int[5];
pos[0]=ipAddress.indexOf("-");
pos[1]=ipAddress.indexOf("-",pos[0]+1);
pos[2]=ipAddress.indexOf("-",pos[1]+1);
pos[3]=ipAddress.indexOf("-",pos[2]+1);
pos[4]=ipAddress.indexOf("-",pos[3]+1);
ip[0]=ipAddress.substring(0,pos[0]);
ip[1]=ipAddress.substring(pos[0]+1,pos[1]);
ip[2]=ipAddress.substring(pos[1]+1,pos[2]);
ip[3]=ipAddress.substring(pos[2]+1,pos[3]);
ip[4]=ipAddress.substring(pos[3]+1,pos[4]);
ip[5]=ipAddress.substring(pos[4]+1);
for(int i=0;i<ip.length;i++)
System.out.println(ip[i]);
System.out.println(Integer.toHexString(Integer.parseInt(ip[0])));
thismac=new byte[]{(byte)0x00,(byte)0x01,(byte)0x02,(byte)0x03,(byte)0x04,(byte)0x05};
return thismac;
}
public static long ipv4tolong(String ipAddress)
{
long[] ip=new long[4];
int position1=ipAddress.indexOf(".");
int position2=ipAddress.indexOf(".",position1+1);
int position3=ipAddress.indexOf(".",position2+1);
ip[0]=Long.parseLong(ipAddress.substring(0,position1));
ip[1]=Long.parseLong(ipAddress.substring(position1+1,position2));
ip[2]=Long.parseLong(ipAddress.substring(position2+1,position3));
ip[3]=Long.parseLong(ipAddress.substring(position3+1));
if(ip[0]<0||ip[1]<0||ip[2]<0||ip[3]<0||ip[0]>255||ip[1]>255||ip[2]>255||ip[3]>255)
return 0;
else
return (ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3];
}
public static String longtoipv4(long longIP)
{
if(longIP<0)
return null;
StringBuffer sb=new StringBuffer("");
sb.append(String.valueOf(longIP>>>24));
sb.append(".");
//将高8位置0,然后右移16位
sb.append(String.valueOf((longIP&0x00FFFFFF)>>>16));
sb.append(".");
sb.append(String.valueOf((longIP&0x0000FFFF)>>>8));
sb.append(".");
sb.append(String.valueOf(longIP&0x000000FF));
String sc=sb.toString();
return sc;
}
}
反正总结一下就是:
1、可以用public static对参数的赋值
2、用自定义的get和set方法,如下 :
class class1
{
private int height;
private int weight;
private int depth;
public void setHeight(int height){
this.height=height;
}
public int getHeight(){
return height;
}
public void setWeight(int weight){
this.weight=weight;
}
public int getWeight(){
return weight;
} public void setDepth(int depth){
this.depth=depth;
}
public int getDepth(){
return depth;
}
}
热心网友
时间:2024-05-14 01:39
你是用jframe做的窗口么?
是的话如下:
按照你的题目要求 可以把窗口1作为主窗口 在主程序中调用 窗口2为副窗口 由窗口1调用。
接下来是窗口类的实现 。 声明先两个窗口类分别是 mJFrame 、nJFrame, 两个类都extends JFrame 有:
mJFrame 窗口1;
nJFrame 窗口2;
接下来就是最重要的了,声明类
窗口1如下:
public class mJFrame extends JFrame{
nJFrame 窗口2; //声明窗口2的类对象
public mJFrame(){
.........
}
//然后在按钮的实现函数中:
nf = new nJFrame(this); //!! 把两个窗口联系起来
nf.setVisible(true); //设置窗口2为可见
this.setVisible(false);//该窗口隐藏
public static void main(..){
mJFrame 窗口1 = new mJFrame();
窗口1.setVisible(true);
窗口1.setDefaultCloseOp.........;
}
}
窗口2的类声明时如下:
public class nJFrame extends JFrame{
mJFrame 窗口1; // 声明一个窗口1的类对象
public nJFrame(mJFrame mframe){
窗口1 = mframe; //赋值
}
窗口1.time..... // 调用time
//按钮实现函数中:
窗口1.setVisible(true);
this.setVisible(false);
}
还有什么不明白的可以hi我阿
热心网友
时间:2024-05-14 01:40
在创建窗口时 将对象引用放放到公共静态变量中
设窗口1的类名FistWindows
设窗口2的类名SecondWindows
你在类Form中创建FistWindows的对象
则:
Form.java
.......
public static FistWindows obFistWindows;
.......
obFistWindows= new FistWindows();
......
通过Form.obFistWindows.公共变量名 就可以在任何地方引用FistWindows中的所有公共变量了,但注意前提是你创建了这个窗口,所以要排除obFistWindows为null的情况
至于SecondWindows 就如法炮制了
热心网友
时间:2024-05-14 01:40
个人建议,仅供参考:
在构造方法方法中声明另外一个窗口还行,
不过感觉不太好,
新建一个专门保存数据time的类,
提供存取接口就是了
窗口1,2建议用单例模式实现
这样只会有一个
保存数据time的类看来也要用单例模式来做了
:)
热心网友
时间:2024-05-14 01:41
把要传递的变量set到session中不就行了?以后的窗口要用的话直接get出来。至于窗口的切换,通过按钮的链接不就OK了?