相关疑难解决方法(0)

等待多个SwingWorkers

请考虑以下代码片段:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.InvocationTargetException;
import javax.swing.*;

public class TestApplet extends JApplet
{
    @Override
    public void init()
    {
        try
        {
            SwingUtilities.invokeAndWait(new Runnable()
            {
                @Override
                public void run()
                {
                    createGUI();
                }
            });
        }
        catch(InterruptedException | InvocationTargetException ex)
        {
        }
    }

    private void createGUI()
    {
        getContentPane().setLayout(new FlowLayout());
        JButton startButton = new JButton("Do work");
        startButton.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent ae)
            {
                JLabel label = new JLabel();
                new Worker(label).execute();
            }
        });
        getContentPane().add(startButton);
    }

    private class Worker extends SwingWorker<Void, …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading swingworker wait

11
推荐指数
1
解决办法
6620
查看次数

小程序未显示完整

我刚刚创建了一个小程序

public class HomeApplet extends JApplet {

    private static final long serialVersionUID = -7650916407386219367L;

    //Called when this applet is loaded into the browser.
    public void init() {
        //Execute a job on the event-dispatching thread; creating this applet's GUI.
//      setSize(400, 400);
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    createGUI();
                }
            });
        } catch (Exception e) { 
            System.err.println("createGUI didn't complete successfully");
        }
    }

    private void createGUI() {
        RconSection rconSection = new RconSection();
        rconSection.setOpaque(true); 

//      CommandArea commandArea = new CommandArea(); …
Run Code Online (Sandbox Code Playgroud)

java layout applet swing japplet

5
推荐指数
1
解决办法
1290
查看次数

动态更改自定义图形的颜色

问题:在运行方法之前,图形不会重新绘制.

单击按钮时会调用两个方法.每个方法内部都是代码,用于更改与此方法关联的图形的颜色(在UI中); 当方法开始时,图形从黑色变为绿色; 当方法完成时,颜色从绿色变为红色.然后调用下一个方法,其图形应变为绿色(方法正在运行),当方法完成时,其图形应填充红色(方法完成).

我创建了一个简单的状态圆图形(带有填充颜色的30像素圆圈),有3种颜色状态:黑色表示准备好; 绿色的跑步; 红色完成.

我认为这个问题与repaint()单独的线程有关并且计划在能够运行时运行?我尝试将更新图形的代码放在自己的thread-runnable中,然后使用线程.join()确保代码已经完成运行但是没有用.

编辑

编辑:删除我用于演示的代码,并根据注释替换单个可运行的代码示例.如果运行代码,您将看到的是在单击每个方法启动和停止时图形不更新的按钮后,它会等待两个方法都运行然后重新绘制图形.

    package graphicsUpdateDemo;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.beans.Transient;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
 * Application entry
 */
public class App{
    public static void main(String[] args) {        
        SwingUtilities.invokeLater(new Runnable() {         
            @Override
            public void run() {
                new MainFrame();                
            }
        }); …
Run Code Online (Sandbox Code Playgroud)

java graphics swing jpanel repaint

4
推荐指数
1
解决办法
1314
查看次数

JApplet和KeyListener

我正在为我的计算机科学课开发一个应用程序.任务是编写计算器,但不使用JTextFields或JTextAreas.我想出了一个实现的想法,KeyListener在appletviewer中都很好用JFrame但在Google Chrome(可能还有其他浏览器)中根本不起作用.

这是我的代码片段.

//- BinaryCalc.java
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

public class BinaryCalc extends JApplet implements KeyListener {

    private JPanel panel;

    public BinaryCalc() {
        super();

        panel = new JPanel();
        this.add(panel);

        panel.addKeyListener(this);
        panel.requestFocusInWindow();
    }

    @Override
    public void init() {
        JOptionPane.showMessageDialog(this, "applet");
        panel.setFocusable(true);
        panel.requestFocus();
    }

    public void keyPressed(KeyEvent e) {
        JOptionPane.showMessageDialog(this, (char) e.getKeyCode());
    }

    public void keyReleased(KeyEvent e) {}

    public void keyTyped(KeyEvent e) {}

    public …
Run Code Online (Sandbox Code Playgroud)

java swing keylistener jframe japplet

3
推荐指数
2
解决办法
1968
查看次数

运行时显示的小程序中的随机数会更新每个帧,或者被背景图像透支

编辑:使用awt ...

我试图在基于applet的数学游戏中显示随机数,并遇到了一个问题.根据我调用方法的位置,发生以下两种情况之一:

  • 这些数字生成并正确显示,不会自动更新每个帧,但是在运行时更新时,每个帧都会被背景和艺术品绘制,或者......
  • 屏幕上显示的数字显示在背景元素上方,但每帧都重新绘制.

快速插图:

private int setNumberOne() {

    return rand.nextInt(11) + 2;
}

private int setNumberTwo() {

    return rand.nextInt(11) + 2;
}

private int setAnswer() {

    return setNumberTwo() * setNumberOne();
}

private void displayOutput() {

    Graphics2D g2d = graphics();

    int one = setNumberOne();
    int ans = setAnswer();

    setNumberTwo();

    g2d.setColor(Color.WHITE);
    g2d.drawString(one + " x ? = " + ans, 480, 480);
}
Run Code Online (Sandbox Code Playgroud)

在初始化方法中调用此函数会显示一个静态问题,我可以在满足特定触发器时在其他位置更新,但是更新事件会在其上方绘制其他所有内容,使其不可见.我设法看到这个工作的唯一方法是从游戏中删除其他图像进行测试.

有没有办法在applet中设置GUI元素的"优先级"?

我目前正在尝试将该displayOutput()方法包含在它自己的线程中,但我对Java并不是那么有经验,并且证明它很难解决.

我也尝试不允许后台在运行时更新,但结果是移动的游戏对象在整个屏幕上留下了痕迹.

我错过了什么?如果有人对如何正确实施这些建议有任何建议,我会很高兴听到他们的意见.

更新:"...在AWT中使用Component的paint(...)方法绘制,并使用JVM传入的Graphics对象" - …

java random runtime awt graphics2d

2
推荐指数
1
解决办法
241
查看次数

将applet迁移到JWS

我有一个大的Java小程序(大约7 MB).这是一个古老而又大的项目,由几个小型项目组成,所有项目都使用"fatjar"捆绑在一个罐子里.由于applet是一项老技术而且我的功能有问题(我的applet没有签名)你能告诉我将代码切换到JWS(Java web start)的确切好处,并且它是值得的开关吗?

如果我切换到JWS,我将能够将我的applet分成几个罐子,这些罐子将由主罐子加载和使用(很像dll)?我的目标是将当前的applet分成几个独立的罐子.这样,当我在一个项目中更改某些内容时,我只会上传一个包含已更改项目的小jar,而不是整个,大而胖的applet.

如果JWS没有比applet好多少,你能建议我使用SWING的其他技术吗?重写(并分成MVC)整个事情所以它使用HTML或其他东西是不行的.我的applet使用的几乎所有控件都是扩展标准SWING控件的特殊自定义控件.

java applet swing java-web-start

2
推荐指数
1
解决办法
983
查看次数

Java JApplet 到 JFrame

我想将 JApplet 转换为 JFrame。我在互联网上找到了这个代码,它是一个单词搜索游戏。我想在类的演示中使用此代码。但我不想在小程序中使用它。我要在这里粘贴的代码大了大约 7,000 个字符。我尝试使用 JApplet 并扩展 JFrame,然后将初始化的所有代码放入构造函数(零参数构造函数)中。这会导致我无法修复的大约十个错误。我想做一个单词搜索游戏,我找到了一个很好的例子,但我无法让它在我的 Eclipse 中运行。

class WordSearch extends JApplet
implements Runnable, KeyListener, MouseListener, MouseMotionListener {

    // Copyright information.

    String copyName = "Word Search";
    String copyVers = "Version 1.1";
    String copyInfo = "Copyright 1999-2001 by Mike Hall";
    String copyLink = "http://www.brainjar.com";
    String copyText = copyName + '\n' + copyVers + '\n'
            + copyInfo + '\n' + copyLink;

    // Thread control variables.

    Thread loopThread;    // Main thread.

    // Constants

    static final int DELAY = 50;    // …
Run Code Online (Sandbox Code Playgroud)

java swing jframe japplet

1
推荐指数
1
解决办法
2834
查看次数