java swing 一个窗口打开新创口 加上go()程序就死掉了

问题描述

java swing 一个窗口打开新创口 加上go()程序就死掉了
import javax.swing.*;

import java.awt.Rectangle;
import java.awt.event.*;

public class Swing7 extends JFrame implements ActionListener {
JButton jb = new JButton();

public Swing7() {    this.setTitle(""Java——"");    jb.setText(""确定"");    jb.setMnemonic('a');    this.add(jb);    this.setBounds(200 300 250 300);    this.setVisible(true);    jb.addActionListener(this); //由于Swing7实现了ActionListener接口,所以给jb添加的ActionListener就是Swing7实例。}public void actionPerformed(ActionEvent e) {// 实现ActionListener接口的actionPerformed接口。    yidengjiang frame=new yidengjiang();    frame.setVisible(true);}public static void main(String args[]) {    Swing7 s = new Swing7();}

}

import java.awt.*;
import java.awt.event.*;
import java.util.Random;

import javax.swing.*;

public class yidengjiang extends JFrame implements ActionListener {

/** *  */private static final long serialVersionUID = -8560277451929244119L;JTextField tf = new JTextField();JButton b1 = new JButton(""开始"");JButton b2 = new JButton(""停止"");boolean isGo = false;String path = ""223.jpg"";ImageIcon background = new ImageIcon(path);JTextArea jiang1= new JTextArea();int choujiangcishu=1;public yidengjiang() {    this.getContentPane().setLayout(null);    Dimension srcDim = Toolkit.getDefaultToolkit().getScreenSize();      System.out.println(srcDim.width+""   ""+srcDim.height);    this.setExtendedState(JFrame.MAXIMIZED_BOTH);    this.getContentPane().add(tf);    this.getContentPane().add(b1);    ImageIcon background = new ImageIcon(path);// 背景图片    JLabel jlbg = new JLabel(background);// 把背景图片显示在一个标签里面    jlbg.setBounds(0 0 srcDim.width srcDim.height);// 把标签的大小位置设置为图片刚好填充整个面板    JPanel imagePanel = (JPanel) this.getContentPane();    imagePanel.setOpaque(false);    this.getLayeredPane().add(jlbg new Integer(Integer.MIN_VALUE));    tf.setFont(new Font(""Courier"" Font.PLAIN 110));    tf.setHorizontalAlignment(JLabel.CENTER);    tf.setOpaque(false);    //tf.setBackground(Color.red);// 按钮红色背景    tf.setEditable(false);//不可编辑    tf.setBorder(BorderFactory.createEmptyBorder());//无边框    tf.setBounds(srcDim.width/2-srcDim.width/3/2 srcDim.height/2+srcDim.height/10/2 srcDim.width/3 srcDim.height/10);    b1.setBounds(0000);    b2.setBounds(0000);    jiang1.setBounds(srcDim.width/30 srcDim.height/20800800);    jiang1.setOpaque(false);    jiang1.setFont(new Font(""Courier""Font.PLAIN22));    jiang1.setEditable(false);    this.getContentPane().add(tf);    this.getContentPane().add(b1);    this.getContentPane().add(b2);    this.getContentPane().add(jiang1);    b1.setActionCommand(""start"");    b1.addActionListener(this);    b2.addActionListener(this);    SymListener sy = new SymListener();    b1.registerKeyboardAction(syKeyStroke.getKeyStroke(KeyEvent.VK_SPACE 0) JComponent.WHEN_IN_FOCUSED_WINDOW);     b2.registerKeyboardAction(syKeyStroke.getKeyStroke(KeyEvent.VK_SPACE 0) JComponent.WHEN_IN_FOCUSED_WINDOW);     //jButton.setMnemonic(KeyEvent.VK_ENTER);    b2.setEnabled(false);    super.setUndecorated(true);// 无标题栏    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    this.setLocation(0 0);    Cursor cu = new Cursor(Cursor.HAND_CURSOR);    this.setCursor(cu);    this.setVisible(true);    tf.setText(""888888"");    go();}    public void go() {    while (true) {        if (isGo == true) {            String s = """";            Random rand = new Random();            for (int j = 1; j <= 1; j++) {                int i = (int) (Math.random()*260000+1);//设定奖项总数                if (i < 10) {                    s = s + ""00000"" + i;                } else if(i<100 & i>=10)                 {                    s = s + ""0000"" + i;                }else if(i<1000 & i>=100)                 {                    s = s + ""000"" + i;                }else if(i<10000 & i>=1000)                 {                    s = s + ""00"" + i;                }else if(i<100000 & i>=10000)                 {                    s = s + ""0"" + i;                }else                {                    s = s +  i;                }            }            tf.setText(s);        }        try {            Thread.sleep(10);        } catch (java.lang.InterruptedException e) {            e.printStackTrace();        }    }}public void actionPerformed(ActionEvent e) {    String s = e.getActionCommand();    if (s.equals(""start"")) {        isGo = true;        b1.setEnabled(false);        b2.setEnabled(true);    } else {        isGo = false;        jiang1.setText(jiang1.getText()+""n""+tf.getText());        b2.setEnabled(false);        b1.setEnabled(true);    }}/*public static void main(String[] args)  {    Dimension srcDim = Toolkit.getDefaultToolkit().getScreenSize();     ImgUtil image =new ImgUtil();    image.createThumb(""3.png""223.jpg""(int)srcDim.getWidth() (int)srcDim.getHeight());    new yidengjiang();} */   class SymListener implements ActionListener {    public void actionPerformed(ActionEvent e) {    Object obj = e.getSource();    if (obj == b1) {            isGo = true;            b1.setEnabled(false);            b2.setEnabled(true);    } else if (obj == b2) {        isGo = false;        operdata aaa =new operdata();        String bb= aaa.getuserdata(tf.getText());        jiang1.setText(jiang1.getText()+""n""+""""+(choujiangcishu++)+"":  ""+tf.getText()+bb);        b2.setEnabled(false);        b1.setEnabled(true);    }    }    }

}

解决方案

SWING是单线程的,需要将循环放到单独的线程中执行。修改成这个:

new Thread(){            public void run() {go();};        }.start();

解决方案二:
new Thread(){

                public void run() {go();};        }.start();

解决方案三:
你的go方法中的while不是死循环吗

时间: 2024-09-07 00:47:34

java swing 一个窗口打开新创口 加上go()程序就死掉了的相关文章

双击任何一个文件夹都会新建一个窗口打开怎么办

这个问题可以说是非常偏门的问题,小编自己遇到这个问题的时候,在网上找了半天都没找到解决办法.网上的解决方法我发现跟我的都不一样最后自己找啊找总于找到原因了,下面给大家归纳下两个失误的操作会使双击任何一个文件夹都会新建一个窗口打开 . 1 比较常见的解决方法就是设置问题 随便打开一个文件夹,然后点击工具,选择文件夹选项,常规里面有个浏览文件,选择第一个.如图: 2 另外一个问题是小编自己操作失误造成的 那就是因为小编的电脑C盘的Program Files 中里面的Java目录里面有一个Intern

打开另一个窗口-winform一个窗口隐藏,另一个窗口打开

问题描述 winform一个窗口隐藏,另一个窗口打开 登陆之后,如何隐藏该窗口,打开另一个窗口 解决方案 Form1 f1 = new Form1(); this.Hide(); if (f1.ShowDialog() == DialogResult.OK) { this.Show(); } 解决方案二: 谢谢,我刚才查资料是这样做的 if(num>0) { conn.Close(); UseCar.Load.LoadAdmin LA=new UseCar.Load.LoadAdmin(); L

JavaFx 怎么从一个窗口打开另一个新窗口

问题描述 如题我知道可以new一个Stage,然后show就行了.问题是我遇到了一个超神奇的问题我的程序是先是一个登陆框,登陆后跳转loading画面,最后进入主程序登录框我在登陆按钮上设监听器,然后执行new一个Stage的任务,loading窗口上没有任何交互按钮,所以我指定设个Initializable的控制器,在initialize里开个线程,异步newstage.当然newstage是在子线程中调用回调函数,在主线程完成的(很绕吧)以上我在java8都工作得很好,但不幸的是我更新到ja

如何在Win7里实现一个窗口打开多个文件夹的方法

  我们常常在使用电脑的时候都会发现,一些win7镜像用户在打开文件夹会发现我们不能同时在一个窗口下打开,用起来非常的不方便,遇到这样的情况该怎么办呢,其实只需要设置一下就可以了,我们来看看下列几个方法吧! 方法一: 1.首先我们在自己的电脑桌面打开我们的计算机图标,然后在窗口中找到我们的工具,然后在选择文件夹选项功能. 2.在打开了文件夹选项窗口后,我们在选中我们需要设置的在同一个窗口打开每个文件夹这个功能勾选,然后点击确认. 3.然后我们保存了以后就可以回到我们的桌面,然后在试试打开文件夹是

(winfrom)datageridview意思是选择一行后,点击一个按钮打开新窗体,是这个id的内容

问题描述 解决方案 解决方案二:抢个沙发,这是要干嘛解决方案三:就是选中一行数据点击修改按钮带到新的窗体在textBox中显示解决方案四:定义一个类(和datagridview一行相对应),将选择的行赋值给这个类实例对象,然后拿着它给修改窗体解决方案五:我要定义个函数怎么获取整个行的值啊在新窗体又怎么接收呢求代码解决方案六:纯手打,如有错误勿喷publicclassStudent{publicstringName{get;set;}publicintAge{get;set;}publicintS

产品经理教你写代码—用JAVA写一个阿里云VPC Open API调用程序

引言 VPC提供了丰富的API接口,让网络工程是可以通过API调用的方式管理网络资源.用程序和软件管理自动化管理网络资源是一件显著提升运维效率和网络生产力的事情.产品经理教你写代码系列文章的目标是不懂代码的网络工程师能一步一步的学会用API管理网络.另外通过文章标题大家也可以看出来,产品经理教你写代码肯定是一个业余班,里面的代码很多写的都不规范,可能也有很多Bug.专业选手可以参考的有限,请适度喷,手下留情.其实如果只是想用单个API调用,可以用下面这个线上工具: https://api.ali

win8总是在新窗口打开文件夹怎么办?

  Windows系统默认是在同一个窗口打开新的文件夹的,但是可能因为误点,导致设置出错,在新窗口打开文件夹,可以通过设置解决. Win8在同一窗口打开每个文件夹的方法与win7基本相似,只是文件夹选项的位置不一样, win7的设置方法: 打开计算机,按一下键盘Alt,在弹出的菜单栏,点击工具-文件夹选项-常规-浏览文件夹-选择"在同一窗口中打开每一个文件夹", win8的具体设置如下: 打开计算机,点击查看-点击"选项"按钮-常规-浏览文件夹-在同一窗口中打开没一

Win8系统在同一个窗口不能打开新文件夹的三种解决方法

  Win8系统同时打开多个文件夹,他们会叠加在同一个窗口.但是有的用户在却不能在同一窗口打开多个文件夹.已经打开一个Win8文件夹的情况下,就不能在同一个窗口打开新的文件夹了,这个时候应该怎么办呢? 方法一: 1.Win+R调出运行 ,输入"regedit"回车或确定打开注册表; 2.然后找到注册表这一项:HKEY_CLASSES_ROOTDirectoryshell 3.将值改为none; 方法二: 1.Win+R调出运行,输入sfc /scannow 让系统自动运行,修复; 2.

java swing的一个小小问题,望高手不吝赐教!

问题描述 java swing的一个小小问题,望高手不吝赐教! java swing中的JFrame加载背景图片后会覆盖掉所有可视组件,求教怎么办? 解决方案 设置下ComponentZOrder 解决方案二: 是ComponentZOrder的问题,去设置一下 解决方案三: 可能是用了drawImage方法导致的,给Frame绘制了Image和设置背景不同