Java的Swing默认不是线程安全的,类的调度应该由线程分派器来安排。如果每个类都各个各的调度,有可能造成线程紊乱,带来一些难以检测的错误。

对于编写实验性代码(每次都只有一个JFrame),如果每次都要编写重复的main函数,显然太浪费精力。利用Java的反射机制,可以编写一个通用的“Swing控制台”用作调度其他类。另外,将代码做一些简单的修改就可以应用于具体应用。

 import java.util.*;
import java.lang.reflect.*;
import javax.swing.*;
import java.awt.*; class SwingConsole { public static void main(String[] args) {
String className;
//get class name
if(args.length > 0){
className = args[0];
}
else{
System.out.println("Enter JFrame class name (e.g java.util.Date): ");
Scanner in = new Scanner(System.in);
className = in.next();
} try{
//get class
final Class cl = Class.forName(className);
if(cl.getSuperclass() != JFrame.class){
//is not a JFrame
System.out.println("It is not a JFrame class");
return;
}
else{
//get class constructor
final Constructor constructor = cl.getConstructor(); //run JFrame
EventQueue.invokeLater(new Runnable(){
public void run(){
try{
JFrame frame = (JFrame) constructor.newInstance();
frame.setTitle(frame.getClass().getName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
catch(Exception e){
e.printStackTrace();
}
}
});
}
}
catch(Exception e){
e.printStackTrace();
}
}
}

SwingConsole的更多相关文章

  1. GUIForDebug

    package gui; import org.luaj.vm2.Globals; import org.luaj.vm2.LuaValue; import org.luaj.vm2.ast.Chun ...

  2. JTree demo

    JFrame居中方法一:   setLocationRelativeTo(null); 注意:必须在整个frame初始化完成后再加上此语句,否则将显示在屏幕右下角 方法二: private Dimen ...

  3. JFrame、JDialog close

    package common; import javax.swing.JFrame; import javax.swing.SwingUtilities; /*2015-5-26*/ public c ...

  4. JComboBox

    package swing.combox; import java.awt.FlowLayout; import javax.swing.DefaultComboBoxModel; import ja ...

  5. JAVA简单Swing图形界面应用演示样例

    JAVA简单Swing图形界面应用演示样例 package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗体 * @author l ...

  6. 【Java】边框总结

    [Java]边框总结 Table of Contents 1 例子代码与结果 2 javax.swing.border 3 BorderFactory 4 LineBorder 5 MatteBord ...

  7. java图形用户界面之列表框

    列表框通过Swing组件JList产生,其总是在屏幕上占据固定行数的空间.如果要得到列表框中被选中的元素,只需调用getSelectedValuesList(),它可以产生一个字符串数组,内容为被选中 ...

  8. java图形界面之图形化按钮

    要将按钮图形化,只需创建一个ImageIcon对象,将图形路径赋予ImageIcon对象,然后将该对象传递给按钮即可. 此处涉及eclipse中图形的路径设置,包括(项目路径下.非项目路径下.相对路径 ...

随机推荐

  1. Uri、UriMatcher、ContentUris详解

    http://blog.csdn.net/feng88724/article/details/6331396 1.Uri 通用资源标志符(Universal Resource Identifier, ...

  2. Android常用第三方框架

    1.volley (截击) 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(sch ...

  3. [转]Web UI 设计命名规范

    来源:http://blog.bingo929.com/web-ui-design-name-convention.html 一.网站设计及基本框架结构: 1.    Container “conta ...

  4. C# 通过hessian调Java注意事项

    照理说C#可以通过标准的web服务可以轻松地调用Java,但是鉴于hessian的高性能及开发效率,个人认为C#通过hessian调用java是很值得提倡的.之前完成的一个比较大型的企业应用项目就是采 ...

  5. 设置 textField.placeholder的颜色和大小

    textField.placeholder = @"请输入手机号码"; [textField setValue:[UIColor blue] forKeyPath:@"_ ...

  6. C# List

    命名空间:using System.Collections; class Program {//做个比较 static void Main(string[] args) { //new对象 Cls a ...

  7. X-Plane飞行模拟器购买安装

    要玩起X-Plane第一个步骤当然是购买了,要购买其实非常简单,只需要一张能够支持MasterCard或者其他外币结算的信用卡,在http://www.x-plane.com/官网上购买即可,比逛淘宝 ...

  8. Codeforces 543B Destroying Roads(最短路)

    题意: 给定一个n个点(n<=3000)所有边长为1的图,求最多可以删掉多少条边后,图满足s1到t1的距离小于l1,s2到t2的距离小于l2. Solution: 首先可以分两种情况讨论: 1: ...

  9. php文件加锁 lock_sh ,lock_ex

    文件锁有两种:共享锁和排他锁,也就是读锁(LOCK_SH)和写锁(LOCK_EX) 文件的锁一般这么使用: $fp = fopen("filename", "a" ...

  10. 从SQL2008R2导入数据到SQL2005

    从SQL2008R2导入数据到SQL2005,数据很大,数据文件大概有120G. 尝试过直接离线附加,失败 尝试过备份还原,失败 最后找到了 1.先执行 exec sp_msforeachtable ...