在我的Java GUI应用程序我有一个JButton和点击时调用一个function连接到一个database,然后调用function到clear一个table在DB,然后调用function从一个文件并加载读取文本variables,这就要求一个function从另一个文件中读取文本,进行比较在data从两个,然后调用function要么update或insert数据在数据库中,所有这一切工作正常.
但是我的问题与JButton它有关,当它点击时我想运行一个Indeterminate progress bar正确的用户知道工作正在完成然后就在它离开之前action listener setIndeterminate to false并设置了progress barto 的值100(complete),但在我的情况下当你点击button它保持在点击状态和progress bar冻结.
我应该实施什么来防止这种情况?可能穿线?但我对java中的线程很新.这是我的动作听众:
private class buttonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if( e.getSource() == genButton )
{
progressBar.setIndeterminate(true);
progressBar.setString(null);
try
{
dbConnect(); //connects to DB …Run Code Online (Sandbox Code Playgroud) 我知道这个问题已经在许多问题上被看到并且已经得到了回答,但是,我仍然无法理解它.
我只想在提取大型xml文件的某些内容时更新progressBar.我认为在不同的线程中使用耗时的循环已经足够了但是?所有我设法获得的是progressBar要么根本没有显示,要么在结束之前更新,就在它关闭之前.
实例在应用程序启动附近的某处,我有:
public class SomeClass {
private SomeClass () {
myXMLParser reader = new myXMLParser();
CoolStuff fromXml = reader.readTheXml();
}
}
Run Code Online (Sandbox Code Playgroud)
使用JProgressBar显示和更新JDialog时:
public class LoadingDialog extends JDialog {
private JProgressBar progressBar;
/* ... */
public void progress() {
progressBar.setValue(progressBar.getValue() + 1);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我有这个myXMLParser:
public class myXMLParser {
private LoadingDialog loadingDialog = new LoadingDialog();
public CoolStuff readTheXml() {
CoolStuff fromXml = new CoolStuff();
while(manyIterations) {
loadingDialog.progress();
fromXml.add(some() + xml() + reading()); …Run Code Online (Sandbox Code Playgroud) 我怎样才能模拟长时间运行的数据库操作?我的要求是在操作完成之前显示带有JProgressBar的对话框.
public void myMethod {
MyProgessBarFrame progFrame = new MyProgressBarFrame(); // this is a JFrame
progFrame.setVisible(true); // show my JFrame loading
// do some processing here while the progress bar is running
// .....
progFrame.setvisible(false); // hide my progress bar JFrame
} // end method myMethod
Run Code Online (Sandbox Code Playgroud)
我有上面的代码.但是当我运行它时,在关闭进度条JFrame之前,一些处理部分不会处理.
如何显示我的进度条并告诉Java继续执行处理部分?
如果我读到一个文件,直到它到达一个空行并且想要在读取完成时创建一个稍微准确的JProgressBar,我该怎么做?
我想问的原因是因为某些文件内读取200ms其中为其他人之间取2500ms和10000ms.
我正在做一些简单的阅读文件
boolean completed
while(!completed) {
//read file
if(reader == null) {
completed = false;
}
}
Run Code Online (Sandbox Code Playgroud)
那么有没有办法让进度条准确适用于这样的情况?(顺便说一下,文件的大小并不一定意味着在这种情况下读取所需的时间更少)
我需要一个非常简单的(骨架)教程,用于在Java中开发GUI的进度条.进度条可以是"不确定的",理想情况下具有可更新的文本标签.
这是一些骨架代码,我希望有人可以扩展到足以让某些东西发挥作用.
class MyFunView extends FrameView {
// class vars and other stuff...
@Action
public void excitingButtonPressed() {
/* I have n files to download */
// Download file 1, set progress bar status to "downloading file 1"
// ...
// Download file n, set progress bar status to "downloading file 2"
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我如何以及如何包装下载代码?(我知道有一些Task的子类需要吗?)
非常感谢提前.
编辑:
我们都只有很多宝贵的时间活着,没有任何方法可以按照我希望的那么少的代码或时间来完成,所以我不会使用进度条.
我有来自UI的服务器调用.它的响应时间有点高.所以我想在从服务器加载数据时显示进度条.我已尝试使用此方法的以下代码来显示进度条.一些我做错的地方当我calculateResult()按下按钮点击方法时,我没有看到进度条.我无需在进度条上显示任何百分比.它只需要显示数据正在加载.
//我试过以下代码
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.InvocationTargetException;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
public class MyProgressBarTest extends JFrame {
private static final long serialVersionUID = 1L;
private static JProgressBar progressBar;
public static void main(String[] args) {
MyProgressBarTest obj = new MyProgressBarTest();
obj.createGUI();
}
public void createGUI() {
JPanel panel = new JPanel();
JButton button = new JButton("Progress");
progressBar = new JProgressBar();
button.addActionListener(new ActionListener() {
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我有一个名为 playerhealth 的 JProgressBar。我把条的颜色改为绿色。这使得文本难以看到,所以我想将 JProgressBar 内的文本颜色设置为黑色。
我读到你可以使用 UIManager 来设置 JProgressBars 的全局颜色,但我只想为这个(和另一个,但这并不重要)做。
我还在这里读到我唯一的其他选择是更改 JProgressBar 类。我该怎么办?
我正在制作一个启动器,我希望有一个自定义的ProgressBar.我已经完成了一些研究,并且可以使用JavaFX(从未用它做过什么),并且可以替换UI.我正在寻找一个圆形边缘和圆形填充条.像这样的东西:
package gui;
import java.awt.Desktop;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
public class Gui extends JFrame {
private static final long serialVersionUID = 1L;
private final JPanel contentPane;
final JFrame frame = new JFrame();
int pX,pY;
/**
* Launch the application.
*/
public static void main(final String[] args) {
EventQueue.invokeLater(new Runnable() { …Run Code Online (Sandbox Code Playgroud) 当我尝试在 JProgressBar 上设置值时,我收到以下错误。
"Optional 不能转换为 Int"
有人可以建议任何解决方法/解决方案吗?
public GUI(){
initComponents();
tL = new TasksToDo();
jProgressBar1.setValue(tL.retrieveTotalHours());// [Where my error occurs]}
}
Run Code Online (Sandbox Code Playgroud)
从 TaskToDo 类中,最初我将其设置为 ArrayList 但警告说需要切换到 Optional:
public class TasksToDo {
public static ArrayList<Task> taskList;
public TasksToDo(){
taskList = new ArrayList<Task>();
taskList.add(new Task(0,"Whitepaper", "Write first draft of Whitepaper", 7));
taskList.add(new Task(1,"Create Database Structure", "Plan required fields and tables", 1));
taskList.add(new Task(2,"Setup ODBC Connections", "Create the ODBC Connections between SVR1 to DEV-SVR", 2));
}
public void addTask (int taskId, String taskTitle, String …Run Code Online (Sandbox Code Playgroud)