我发现当我单击“无响应”之类的“开始”按钮时,我的GUI在3-4秒后开始冻结。当我继续单击该应用程序时,它被迫关闭。
现在我想防止这种情况,但是我不知道如何。据我所知,JavaFX在单线程中运行,因此,要在执行方法时更新我的TextArea,我需要在另一个线程中运行这些方法。
我希望有一个人可以帮助我。
我的项目看起来如何?
我有一个FXML,一个控制器,一个处理程序,一个Transformer,还有一个Writer和Reader类(在Handler类中使用)。
当我单击绑定到Controller中的方法的按钮时,将创建Handler的实例,该实例调用Reader读取文本文件,并将其转换为字符串列表(逐行)。
另外,生产线正在被操纵。此后,使用Writer创建一个新文件,并将新的操纵行写入该文件。
还允许用户引用多个文件。
我想要的是,每当读者开始读取“正在读取文件...”之类的文件时,文本区域都会显示。
然后在Transformer生效时附加“正在操纵文件...”,然后
将新行写入新文件时,“正在写入文件...”。
这是一些代码。
控制器:
public class FXMLDocumentController implements Initializable {
@FXML
private TextArea console;
@FXML
private void handleButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
Handler hand = new Handler();
hand.handle(files);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
Run Code Online (Sandbox Code Playgroud)
处理程序:
public class Handler {
public void handle(List<String> files) {
for (String s : files) {
List<String> ls = Reader.readFile(s);
Writer.writeFile(Transformer.transform(ls));
}
}
Run Code Online (Sandbox Code Playgroud)
每当读取,操作或写入文件时,应如何更改代码以更新TextArea?
信息:我知道Handler将无法编译,因为我删除了包含文件路径字符串的列表“文件”的初始化。
如果我遗漏了相关信息,请随时提问。
我提前谢谢你!
componentWillReceiveProps和其他生命周期方法似乎是欺骗性的诱惑,为无经验的React编码器手中的代码带来不必要的复杂性和噪音.它们为什么存在?他们最典型的用例是什么?在不确定的时刻,我怎么知道答案是否存在于生命周期方法中?
我所需要的只是能够以编程方式获取值,设置值,当然还允许用户通过写入字段或按箭头来设置值.MSDN对此非常麻烦,并没有提供足够的信息如何工作.在互联网的其他部分,没有代码可以做的工作示例.
我正在使用Windows 7中的MinGW编译程序,我需要它在Windows 7及更高版本上运行.无论是否使用程序Win32 API或MFC编写都没关系.
编辑: 经过一番讨论,我意识到我忘了指出重要的事实.我真的只是编写一个非常简单的应用程序,它将包含不超过3个小部件,我不打算将来使用Win32 API.因此,我没有理由学习所有这些特定于Windows的机制,并遵循MSDN强大的方法,使用资源文件中的自定义对话框定义或在内存中构建.
有没有办法,怎么做没有资源文件,自定义对话框类,并尽可能少的代码行?如何在现有窗口中直接创建一个spinbox以及我需要处理哪些消息?
我需要QDateTime从格式中获取一个对象"hh:mm:ss".哪个年,月,日应该从当前日期开始?
除了预先yyyy-mm-dd输入字符串之外,是否有人建议任何更清洁的解决方案.
我有JavaFX TableViewUI更新的问题.更改可观察对象后,它不会更新UI TableView.但是,如果我执行一个神奇的仪式,TableView再次向下拉动滚动条 - 它似乎重绘了表格并更新其中的项目.通过调试,我确保了PreferencesSet ArrayList和对象的正确更新.
这是我第一次在这里提问,所以我可能遗漏了一些重要的信息.随意问我这个问题.先感谢您.
这是代码(我遗漏了不相关的东西):
ControllerClass:
public class TestSomethingController implements Initializable {
public TableView<PreferenceValues.PreferencesSet> preferencesTable;
public TableColumn mdColumn;
public TableColumn typeColumn;
public TableColumn tradeColumn;
public TableColumn plastColumn;
public TableColumn capColumn;
public TableColumn multColumn;
public TableColumn sizeColumn;
@Override
public void initialize(URL location, ResourceBundle resources) {
setNorthPanel();
setTableColumns();
fillAllInfo();
}
private void setTableColumns() {
mdColumn.setCellValueFactory(new PropertyValueFactory<PreferenceValues.PreferencesSet, MarketDirection>("md"));
typeColumn.setCellValueFactory(new PropertyValueFactory<PreferenceValues.PreferencesSet, UserOfferType>("type"));
tradeColumn.setCellValueFactory(new PropertyValueFactory<PreferenceValues.PreferencesSet, Boolean>("trade"));
plastColumn.setCellValueFactory(new PropertyValueFactory<PreferenceValues.PreferencesSet, Long>("plast"));
capColumn.setCellValueFactory(new PropertyValueFactory<PreferenceValues.PreferencesSet, Double>("cap"));
multColumn.setCellValueFactory(new PropertyValueFactory<PreferenceValues.PreferencesSet, Double>("mult"));
sizeColumn.setCellValueFactory(new PropertyValueFactory<PreferenceValues.PreferencesSet, …Run Code Online (Sandbox Code Playgroud) 抱歉,这是我第一次使用Threads.
我希望Parlami类线程能够睡眠,并且只能被actionListener唤醒.
我试过这种方式,但它不起作用,他还在睡觉.以这种方式使用线程是正确的还是我应该使用wait()?
package parlami;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author giacomofava
*/
public class Parlami
{
public boolean finito = false;
public String s="";
public void ascolta()
{
int i=0;
while (i<=1500)
{
// dormi 50 millisecondi
try
{
Thread.sleep(50);
i+=40;
}
catch (InterruptedException e)
{
}
while (voce.SpeechInterface.getRecognizerQueueSize() > 0)
{
s = s+"\n"+voce.SpeechInterface.popRecognizedString();
}
}
}
public String scrivi()
{
return "Hai detto: "+s;
}
public void leggi()
{
voce.SpeechInterface.synthesize(s);
}
public void dormi(int milli) …Run Code Online (Sandbox Code Playgroud) 我有一个标签,我作为标题放在屏幕的顶部.当我通过嵌入导航控制器添加导航控制器时,我希望保持可见性并仍然存在.
我主要使用故事板来帮助我创建UI.
这是没有导航控制器的应用程序的样子:

但是,如果我添加导航控制器,我会得到以下内容:

当然,我想维护一个导航控制器,这样我就不必使用自己的控制导航的按钮.据我了解,目前市场徽标隐藏在导航控制器后面.
我编写了一个程序,用户可以使用该程序绘制形状,将实际按钮和其他工具放在窗体上并使它们处于活动状态.但是,我注意到这种形式的TButton和设计模式中的TButton的外观有很大不同.看看下面的图片.
这个按钮来自我的程序,图像正下方是我在此表单上创建此按钮的方式:

constructor TMakerButton.Create(r:TRect;form:TForm);
begin
inherited Create(r,form);
myType := totButton;
name := 'Button';
caption := 'Button';
lines := TStringList.Create;
lines.Clear;
button := TButton.Create(form);
button.Parent := form;
button.caption := string(caption);
button.Tag := LongInt(Self);
if form is TMakerFrm then
begin
button.Enabled := false;
end;
button.OnClick := ButtonClick;
button.OnMouseMove := ButtonMove;
myControl := button;
with bounds do
button.SetBounds(left,top,right-left,bottom-top);
end;
Run Code Online (Sandbox Code Playgroud)
这是delphi编译器中设计模式中的TButton.看看它如何看起来像具有抛光玻璃外观的3D:
有趣的是,我的程序按钮和delphi编译器的基类是TButton所以,为什么它们看起来如此不同以及如何使我的Button看起来一样?
我有一个Labels的列表视图,我想在运行时为列表单元着色。问题是我想用整个颜色(不仅是标签的背景)填充整个单元格。有没有办法在Java / CSS中做到这一点?
我想让程序跳回选项部分,不要为变量"expression"赋值
我试着做嵌套的do函数:
main = do
...
option = do
Run Code Online (Sandbox Code Playgroud)
然后我会在某些情况下只调用"选项",但它似乎没有这样工作,我找不到任何地方任何不同的解决方案.请问有人给出建议吗?
main = do
putStrLn "Enter expression:"
expression <- getLine
putStrLn "Enter a number from 1 to 5:"
putStrLn "1. Convert to Postfix"
putStrLn "2. Convert to Prefix"
putStrLn "3. Convert to Binary Expression Tree"
putStrLn "4. Substitution"
putStrLn "5. Evaluate Expression"
choice <- getLine
case (choice) of
"1" -> putStrLn $ toPostfix expression
"2" -> putStrLn $ toPrefix expression
"3" -> print (parse expression)
"4" -> do { putStrLn "Enter …Run Code Online (Sandbox Code Playgroud)