У меня странная проблема при запуске моей Java-программы. Он предназначен для:JFrame не отображается с красным фоном
- запустить внешнее приложение, указанного в летучей мыши файл и отобразить полноэкранный обои
- обои «шкура» в течение некоторого времени, когда кнопка сочетание прессованного
- предупреждает пользователь о том, 5се влево, чтобы он мог сохранить работу
- , когда тайм-аут дисплея снова встречается, полноэкранное обои и сделать некоторые другие вещи из летучих мышей
- бросить курить программы, когда комбинация нажата кнопка
warinng пользователь реализован как отображение полноэкранного красного окна на 200 мс Я использую видимый функция для этого.
В нем отображаются стандартные настройки цвета в полноэкранном режиме. но только когда я прокомментирую frame.setUndecorated(true)
. при раскомментировании я вижу только значок на панели задач.
С другой стороны, когда я запускаю (используя BlueJ), только функция видна красная рамка отображается для указанного количества времени. Просто автономная функция работает отлично (в моем oppinion), даже если используется 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)
{
}
});
}
}
извините за условное обозначение кода. Я внес некоторые изменения, и теперь я использую только один класс. Я поместил необходимый код в ** видимый ** funciton. Я вижу рамку, но цветная информация отбрасывается.Спасибо за параллелизм и таймеры, но я думаю, что проблема не связана с 'thread.sleep()' – nightwissh
Я не понимаю. почему он не может выполнить живопись, если напр. команда 'System.out.printf (« test »)' может отображаться перед вызовом функции ** visible ** и после вызова? Я могу даже поместить эту команду в каждое место в функции, и все они выполняются. Любая другая команда работает, но изменение цвета или удаление заголовка слишком много? – nightwissh
Потому что это все о потоках. 'System.out' не зависит от EDT, поскольку он смог произвести его вывод. Все графические функции, поэтому, когда используется «Thread.sleep», поток, который обычно будет обрабатывать события обработки (и другие события), останавливается (спящий). Из-за того, как работает API, вы можете получить пустое изображение на экране, это основная обработка ОС, это конец запроса, но для Java/Swing, чтобы иметь возможность рисовать на нем, он должен иметь возможность реагировать на события окраски были помещены в очередь событий. – MadProgrammer