gpt4 book ai didi

java - JFrame 不显示红色背景

转载 作者:行者123 更新时间:2023-12-02 03:42:02 25 4
gpt4 key购买 nike

运行 Java 程序时遇到奇怪的问题。它的设计目的是:

  1. 运行bat文件中指定的外部应用并显示全屏壁纸
  2. 按下按钮组合时“隐藏”壁纸一段时间
  3. 警告用户还剩 5 秒,以便他可以保存工作
  4. 当超时发生时,再次显示全屏壁纸并执行 bat 的其他一些操作
  5. 按下按钮组合时退出程序

警告用户实现为全屏显示红框200ms我正在使用 visible 函数来执行此操作。

它显示标准全屏框架,放弃颜色设置。但只有当我评论frame.setUndecorated(true)时。取消注释时,我只能在任务栏中看到图标。

另一方面,当我启动(使用 BlueJ)时,只有功能可见红框将显示指定的时间。即使使用了frame.setUndecorated(true),简单的独立函数也能完美运行(在我看来)。

我无法全屏启动那个红框,这可能是什么问题?

olympicApp 类:

import java.awt.*;
import java.awt.Color;
import java.awt.event.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.Graphics;
import java.awt.image.*;
import java.io.*;
import java.io.IOException;
import javax.imageio.*;
import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JComponent;

public class olympicApp extends JComponent {
alertApp alert;
BufferedImage img;
public olympicApp()
{
try
{
img = ImageIO.read(new File("wallpaper.jpg"));
}
catch (IOException e)
{
}
}

public void paint(Graphics g)
{
g.drawImage(img, 0, 0, null);
}

public Dimension getPreferredSize()
{
if (img == null)
{
return new Dimension(200,200);
}
else
{
return new Dimension(img.getWidth(null), img.getHeight(null));
}
}

public static void visible()
{
JFrame frame = new JFrame();
frame.getContentPane().setBackground(Color.red);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.dispose();
//frame.setUndecorated(true);
frame.setAlwaysOnTop(true);
frame.pack();
frame.setVisible(true);
try
{
frame.setVisible(true);
Thread.sleep(500);
frame.setVisible(false);
}
catch(Exception ex)
{
}
frame.setAlwaysOnTop(false);
frame.setVisible(false);
}

public static void main(String[] args)
{
//alertApp reminder = new alertApp();
try
{
Process process = Runtime.getRuntime().exec("start-lv.bat");
Thread.sleep(500);
}
catch (IOException | InterruptedException e)
{
}
JFrame f = new JFrame("olympic");
f.setExtendedState(JFrame.MAXIMIZED_BOTH);
f.setUndecorated(true);
f.setAlwaysOnTop(true);
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
f.add(new olympicApp());
f.pack();
f.setVisible(true);
f.addKeyListener(new KeyListener()
{
public void keyPressed(KeyEvent kevt)
{
if(kevt.getKeyChar()=='l')
{
if(kevt.isAltDown())
{
f.setAlwaysOnTop(false);
f.setVisible(false);
try
{
Thread.sleep(5*1000);
visible();
Thread.sleep(5*1000);
//Process process = Runtime.getRuntime().exec("saving.bat");
Thread.sleep(500);
f.setAlwaysOnTop(true);
f.setVisible(true);
Process process2 = Runtime.getRuntime().exec("kopia.bat");
}
catch(IOException | InterruptedException e)
{
}
}
}

if(kevt.getKeyChar()=='q')
{
if(kevt.isAltDown())
{
System.exit(0);
}
}
}

public void keyTyped(KeyEvent kevt)
{
}

public void keyReleased(KeyEvent kevt)
{
}
});
}
}

最佳答案

我想你必须在这里做点什么......

public class alertApp {

public static void main(String[] args) {
// Sample loop to flash every 2 seconds
}
}

当你的程序启动时,你应该在其中放置代码以使程序运行,这会被调用

我还强烈建议您看一下Code Conventions for the Java TM Programming Language ,这将使人们更容易阅读您的代码,也让您更轻松地阅读其他人

以及 Concurrency in SwingHow to use Swing Timers这将帮助您解决其他潜在问题

I put neccessary code in visible funciton. I can see the frame but color information is discarted. Thanks for Concurrency and Timers, but I think the problem isn't connected to thread.sleep()

那你没有阅读链接...

public void keyPressed(KeyEvent kevt) {
if (kevt.getKeyChar() == 'l') {
if (kevt.isAltDown()) {
f.setAlwaysOnTop(false);
f.setVisible(false);
try {
Thread.sleep(5 * 1000);
visible();
Thread.sleep(5 * 1000);
//Process process = Runtime.getRuntime().exec("saving.bat");
Thread.sleep(500);
f.setAlwaysOnTop(true);
f.setVisible(true);
Process process2 = Runtime.getRuntime().exec("kopia.bat");
} catch (IOException | InterruptedException e) {
}
}
}

keyPressed 是在事件调度线程的上下文中执行的,因此当您调用 Thread.sleep 时,它会阻止 EDT 处理事件队列,从而阻止它绘画或响应其他事件

关于java - JFrame 不显示红色背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36730563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com