gpt4 book ai didi

Java GUI 不会显示

转载 作者:行者123 更新时间:2023-11-30 07:12:47 25 4
gpt4 key购买 nike

我目前正在开发一个使用树莓派全屏显示的程序,当我在 Eclipse“在 pi 上”运行这个程序时,它工作正常,看起来像这样

enter image description here

但是当我将文件导出到可运行的 jar 时,会发生这种情况

enter image description here

但我没有收到任何错误,它也没有关闭,它只是显示窗口,但没有任何反应。

这是您看到的框架的代码,

package Main;

import java.awt.Button;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Tester extends JFrame {

// R3T Object
r3t R3T = new r3t();

// Random Stuff
public static boolean updateMe = false;
private int count = 0;
public static int R3TCount = 0;

private ImageIcon tank_full = new ImageIcon("src/res/level.png");
private ImageIcon tank_empty = new ImageIcon("src/res/tank_empty.png");

// For drawing the rectangle Y = NON DEFAULT
public static int NDRECT_Y = -0;
public static int TankValue = -0;
public static String TankLevel = "0.0";

//RATIOS
private int X1 = (int)(WIDTH * 0.06);
private int Y1 = (int)(HEIGHT * 0.111);
private int Y2 = (int)(HEIGHT * 0.781);

//Screen
public static Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
public static int WIDTH = (int)screenSize.getWidth();
public static int HEIGHT = (int)screenSize.getHeight();


public Tester() {
//Screen Size
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setTitle("Tank Level");
this.setUndecorated(true);
this.setLocation(0, 0);
this.setSize(new Dimension(WIDTH, HEIGHT));
this.setVisible(true);
}

public void paint(Graphics g) {

g.drawImage(tank_empty.getImage(), 0, 0, WIDTH, HEIGHT, this);

// REMINDER : x , y, x, y
g.drawImage(tank_full.getImage(), X1, Y1, TankValue, Y2, this);

drawTankLevel(g);
g.dispose();
doTask();
count += 1;
}

public void drawTankLevel(Graphics temp) {
temp.setFont(new Font("Vendana", 0, 30));
temp.drawString(" ", (WIDTH / 2) - 20, (HEIGHT / 2));
temp.drawString(TankLevel, (WIDTH / 2)- 20, (HEIGHT / 2));
temp.dispose();
}

public static void updateTankLevel(double level) {
TankValue = (int) ((WIDTH * level / 100) - (WIDTH * 0.12));
TankLevel = String.valueOf(level);
}

public static double getTankLevel() {
return Double.parseDouble(TankLevel);
}

public void doTask() {
if (count == 0) {
Thread t = new Thread(new Runnable() {

public void run() {
while (true) {
try {
Thread.sleep(2500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
System.out.println();
System.out.println ("CNT: "+R3TCount);
System.out.println ("-----------------");

R3T.GetDeviceInfo();
R3TCount += 1;
repaint();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("ERROR: " + e.getMessage());
} catch (InterruptedException t) {
System.out.println("ERROR: " + t.getMessage());
}
}
}
});
t.start();
repaint();
}

if (updateMe) {
System.out.println("R3T: Updated Guage!");
updateMe = false;
}
}

public static void main(String[] args) {
Tester test = new Tester();
}
}

这是更改值的代码,它是蓝牙扫描并获取设备的名称,我知道这工作正常,因为它打印了值,只是不在屏幕上更新它

public void calculateTankLevel(String tempDevice) {
String deviceName = tempDevice.substring(18, tempDevice.length());

int byt_div = 0xE005;
int num_div = 10;
byte[] valueRay;

valueRay = hexStringToByteArray(deviceName.substring(deviceName.length() - 4, deviceName.length()));

double value = twoBytesToShort(valueRay[0], valueRay[1]);
double val = ((value - byt_div) / num_div);

System.out.println ("R3T: Calculated Tank Level");

if (val == Tester.getTankLevel()) {
//The value hasnt change dont update.
System.out.println ("R3T: Tank Level *NU*");
} else {
//Value has changed update UI and send to webservice
//R3TWebCall.sendTankLevel(val);
System.out.println("Tank Level: "+val);
Tester.updateTankLevel(val);
Tester.updateMe = true;
}
}

我在代码中添加了另一部分,就是这样。

File f = new File("res/level.png");
if(f.exists() && !f.isDirectory()) {
System.out.println("TANK FULL EXISTS");
} else {
System.out.println("TANK FULL DOES NOT EXISTS");
}

File f1 = new File("res/tank_empty.png");
if(f1.exists() && !f.isDirectory()) {
System.out.println("TANK EMPTY EXIST");
} else {
System.out.println("TANK FULL DOES NOT EXISTS");
}

添加此命令后,它会告诉我查找它的时间是否存在,当我在 Eclipse 中运行它时,它会说文件确实存在,但是!当我导出到 jar 文件时,它说它不存在!

最佳答案

我很久以前就遇到过这个问题,您可能没有将资源文件夹声明为“类文件夹”。右键单击您的项目,然后转到属性,然后转到 java 构建路径,然后单击“添加类文件夹”。将弹出一个窗口,通过选中复选框选择您的资源文件夹“res”。您可能还需要修改您的路径。

还将你的 res 文件夹移到 src 文件夹之外,src 文件夹仅用于代码源,而不用于资源。要加载资源,您还可以使用 MyClass.class.getRessourceAsStream("path");

关于Java GUI 不会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38925036/

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