一般更新了jframe,需要repaint一下。你把frame代码和按钮事件的代码发一下吧。ps:楼主太抠门了,这么多分,问个问题20分,怎么也得200分啊。。
解决方案 »
- 这个类的值为什么改变呢?
- struts2里session和hibernate里的session究竟有什么区别啊?
- 怎么让JFrame只在托盘显示,不在任务栏显示
- 初学者:JAVA要想做出个BBS的DD复杂吗?
- linux利用poi读取word文档的问题
- 请您指教
- 急!!!关于java时间的运算 !!!!!
- 请教一个过时API的问题
- 运行主程序怎么会找不到STUB?谁来帮帮忙啊~~~~(RMI)
- 高手帮忙!参与者都有分,excel 和 ms sql导数据的问题!!!!
- struts2拦截器AbstractInterceptor的问题
- socket使用两个线程分别收发,收到结束标识怎么结束发线程的流
public void actionPerformed(ActionEvent arg0){
if(arg0.getSource()==postBut){
for(int i = 0;i<4000;i++){
Thread accept = new Thread(){
public void run(){
new ChangeIP();
}
};
accept.start();
try{
//....模拟post代码
}catch(Exception e){
e.printStackTrace();
}
}
}
}
});
那个ChangeIP类就是在构造函数里面执行一些修改机器ip的代码,没有用frame界面。p.s.比较愚笨,问题比较多,入不敷出啊,所以要省着用,下次改40分,呵呵
我刚试了,即使改成10,甚至是1都不行,如果我不执行new ChangeIP();就是先用目前的ip去做post,结果什么的都正确,没问题,只要是执行了new ChangeIP();感觉好像是frame这个线程就不动了,连关闭的按钮都点了没反应了。
ChangeIP也发一下
package vote;import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;public class TestPost {
public static void main(String[] args) throws Exception{
new TestPost();
}
public TestPost()throws Exception{
JFrame frame = new JFrame("自动投票程序");
frame.setResizable(false);
frame.setSize(new Dimension(400, 360));
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(300, 200);
frame.setVisible(true);
final JButton ipBut = new JButton("添加ip数据库");
final JButton postBut = new JButton("开始投票");
final JTextArea resultText = new JTextArea("程序运行结果如下:\n");
final JScrollPane resultPane = new JScrollPane(resultText,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JLabel info = new JLabel("使用方法:先添加ip段数据,再开始投票!");
frame.getContentPane().add(ipBut, null);
frame.getContentPane().add(postBut, null);
frame.getContentPane().add(resultPane, null);
frame.getContentPane().add(info, null);
ipBut.setBounds(10, 10, 120, 30);
postBut.setBounds(150, 10, 120, 30);
resultPane.setBounds(10, 40, 380, 260);
info.setBounds(10,300,350,30);
ipBut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
if(arg0.getSource()==ipBut){
new AddIPDatabase();
}
}
});
postBut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
if(arg0.getSource()==postBut){
for(int i = 0;i<4000;i++){
Thread accept = new Thread(){ //定义Accept线程
public void run(){
new ChangeIP();
}
};
accept.start();
try{
Thread.sleep(18000);//18秒一个机器 可以反应过来,否则ip还未生效。
}catch(InterruptedException e){
e.printStackTrace();
}
try{
URL url = new URL("http://192.168.0.5/vote/search.php");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(),"utf-8"));
br.write(URLEncoder.encode("name","utf-8"));
br.write("=");
br.write(URLEncoder.encode("张三","utf-8"));
br.write("&");
br.write(URLEncoder.encode("inst[0]","utf-8"));
br.write("=");
br.write(URLEncoder.encode("网络","utf-8"));
br.write("&");
br.write(URLEncoder.encode("inst[1]","utf-8"));
br.write("=");
br.write(URLEncoder.encode("打球","utf-8"));
br.flush();
br.close();
conn.getInputStream();
//接受服务器返回数据
BufferedReader br1 = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
// 打印消息正文
String line="";
String result = "";
while((line=br1.readLine())!=null) {
result += line + "\n";
}
br1.close();
writeLog(result);
}catch(Exception e){
e.printStackTrace();
}
}
}
}
public void writeLog(String logtext){
resultText.append(logtext);
resultText.setSelectionStart(resultText.getText().length());
resultText.paintImmediately(resultText.getBounds());
}
});
}
}
这是changip的程序,文本文件里面每一行就是调用netsh修改ip的,每次取一行去执行。
package vote;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStreamWriter;
import java.util.Random;public class ChangeIP {
public static void main(String[] args) {
new ChangeIP();
}
public ChangeIP(){
String fileName = "resource/ipdatabase.txt";
File file = new File(fileName);
int fileLine = getRows(file)-1;
Random r = new Random();
int line = r.nextInt(fileLine)+1;
//System.out.println(line);
try {
delRow(file,line);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void delRow(File file,int rowToDel) throws Exception{
File temp = new File("resource/temp.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(file)));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(temp)));
String str;
int rowIndex = 1;
while (null != (str = reader.readLine())){
if (rowIndex != rowToDel){
writer.write(str + "\r\n");
}else{
System.out.println(str);//此处执行更改ip操作
Runtime.getRuntime().exec(str);
}
rowIndex++;
}
reader.close();
writer.close();
file.delete();// 删除原文件
temp.renameTo(file);// 临时文件改名成原文件名称
}
public static int getRows(File file){
LineNumberReader lnr = null;
int num = 0;
try {
lnr = new LineNumberReader(new FileReader(file));
lnr.skip(Long.MAX_VALUE);
num = lnr.getLineNumber();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
lnr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return ++num;
}
}
public void setDefaultCloseOperation(int operation)
Sets the operation that will happen by default when the user initiates a "close" on this frame. You must specify one of the following choices: DO_NOTHING_ON_CLOSE (defined in WindowConstants): Don't do anything; require the program to handle the operation in the windowClosing method of a registered WindowListener object.
HIDE_ON_CLOSE (defined in WindowConstants): Automatically hide the frame after invoking any registered WindowListener objects.
DISPOSE_ON_CLOSE (defined in WindowConstants): Automatically hide and dispose the frame after invoking any registered WindowListener objects.
EXIT_ON_CLOSE (defined in JFrame): Exit the application using the System exit method. Use this only in applications.
The value is set to HIDE_ON_CLOSE by default. Changes to the value of this property cause the firing of a property change event, with property name "defaultCloseOperation". Note: When the last displayable window within the Java virtual machine (VM) is disposed of, the VM may terminate. See AWT Threading Issues for more information. http://docs.oracle.com/javase/6/docs/api/java/awt/doc-files/AWTThreadIssues.html
Parameters:
operation - the operation which should be performed when the user closes the frame
Throws:
IllegalArgumentException - if defaultCloseOperation value isn't one of the above valid values
SecurityException - if EXIT_ON_CLOSE has been specified and the SecurityManager will not allow the caller to invoke System.exit
See Also:
Window.addWindowListener(java.awt.event.WindowListener), getDefaultCloseOperation(), WindowConstants, Runtime.exit(int)
--------------------------------------------------------------------------------
如果执行过程中你不点关闭。运行结束窗体还在。postBut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
if(arg0.getSource()==postBut){
for(int i = 0;i<10;i++){
Thread accept = new Thread(){ //定义Accept线程
public void run(){
System.out.println(new Date());
// new ChangeIP();
}
};
accept.start();
try{
Thread.sleep(1000);//18秒一个机器 可以反应过来,否则ip还未生效。
}catch(InterruptedException e){
e.printStackTrace();
}
// try{
// URL url = new URL("http://192.168.0.5/vote/search.php");
// URLConnection conn = url.openConnection();
//
// conn.setDoOutput(true);
// conn.setDoInput(true);
// BufferedWriter br = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(),"utf-8"));
// br.write(URLEncoder.encode("name","utf-8"));
// br.write("=");
// br.write(URLEncoder.encode("张三","utf-8"));
// br.write("&");
// br.write(URLEncoder.encode("inst[0]","utf-8"));
// br.write("=");
// br.write(URLEncoder.encode("网络","utf-8"));
// br.write("&");
// br.write(URLEncoder.encode("inst[1]","utf-8"));
// br.write("=");
// br.write(URLEncoder.encode("打球","utf-8"));
// br.flush();
// br.close();
// conn.getInputStream();
//
//
// //接受服务器返回数据
// BufferedReader br1 = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
// // 打印消息正文
// String line="";
// String result = "";
// while((line=br1.readLine())!=null) {
// result += line + "\n";
// }
// br1.close();
// writeLog(result);
// }catch(Exception e){
// e.printStackTrace();
// }
}
}
}
2、把改ip那个不用线程方式启动,也是得等到循环结束才显示。
参考这个问题:http://www.iteye.com/problems/51628