package com.example.qqeasy; import com.example.qqeasy.chatInterface.Sc.Server; import com.example.qqeasy.chatInterface.chatCon.ChatConCli; import com.example.qqeasy.chatInterface.chatCon.ChatConSer; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; import java.util.Objects; public class t extends Application { public void start(Stage primaryStage) throws Exception { // 加载FXML文件 FXMLLoader clientLoader = new FXMLLoader(Objects.requireNonNull(getClass().getClassLoader().getResource("chat1.fxml"))); Parent clientRoot = FXMLLoader.load(Objects.requireNonNull(getClass().getClassLoader().getResource("chat1.fxml"))); ChatConCli clientController = clientLoader.getController(); FXMLLoader serverLoader = new FXMLLoader(Objects.requireNonNull(getClass().getClassLoader().getResource("chat2.fxml"))); Parent serverRoot = FXMLLoader.load(Objects.requireNonNull(getClass().getClassLoader().getResource("chat2.fxml"))); ChatConSer serverController = serverLoader.getController(); // 创建场景 Scene clientScene = new Scene(clientRoot,593,660); Scene serverScene = new Scene(serverRoot,600,400); // 设置舞台 primaryStage.setScene(clientScene); primaryStage.show(); // 启动服务器 Server server = new Server(serverController); server.start(); // // 设置按钮点击事件 // Button sendButton = (Button) clientRoot.lookup("#sendButton"); // sendButton.setOnAction(e -> clientController.sendMessage()); } public static void main(String[] args) { launch(args); } } 运行后白屏
时间: 2024-04-14 21:29:36 浏览: 171
根据你提供的代码,白屏的原因可能是以下几点:
1. FXML文件路径错误:检查一下`chat1.fxml`和`chat2.fxml`文件是否位于正确的路径下。确保这两个文件都在与`t.java`相同的目录或子目录下。
2. 控制器类没有正确加载:在`FXMLLoader.load()`方法中,你应该传递`clientLoader`和`serverLoader`,而不是重新创建一个新的`FXMLLoader`对象。修改以下代码:
```java
Parent clientRoot = clientLoader.load();
Parent serverRoot = serverLoader.load();
```
3. FXML文件中的根元素问题:确保`chat1.fxml`和`chat2.fxml`文件中的根元素与对应的Controller类相匹配。例如,如果`chat1.fxml`中的根元素为`AnchorPane`,则对应的Controller类应该是`ChatConCli`,确保这两者一致。
请检查以上三点,并确保代码中没有其他问题,然后再次运行程序,看看是否能够正常显示界面。如有需要,请提供更多的代码和错误信息以便我更好地帮助你解决问题。
相关问题
package 作业5; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import java.io.File; import java.util.HashMap; import java.util.Scanner; import java.io.File; import java.util.HashMap; import java.util.Scanner; public class Example13_7{ public static void main( String args []){ WindowWord win = new WindowWord(); win.setTitle("英﹣汉小字典"); } } class WindowWord extends JFrame{ JTextField inputText,showText; WordPolice police; public WindowWord(){ setLayout(new FlowLayout()); inputText = new JTextField(6); showText = new JTextField(6); showText.setColumns(15); add(inputText); add(showText); police = new WordPolice(); police.setView(this); inputText.addActionListener(police); setBounds(100,100,400,280); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } class WordPolice implements ActionListener { WindowWord view; HashMap<String,String>hashtable; File file = new File ("E:\\JAVA\\上机\\作业5\\cet4.txt"); Scanner sc = null ; WordPolice () { hashtable = new HashMap< String,String >(); //System.out.println(hashtable.size()); try { sc = new Scanner ( file ); //System.out.println(sc); while (sc.hasNext ()) { String englishWord = sc . next (); String chineseWord = sc . next (); hashtable . put ( englishWord , chineseWord ); } HashMap<String,String> reversedHashtable = new HashMap<String,String>(); for (String key : hashtable.keySet()) { String value = hashtable.get(key); reversedHashtable.put(value, key); } hashtable.putAll(reversedHashtable); } catch(Exception e ) {} } public void setView(WindowWord view) { this.view = view; } public void actionPerformed(ActionEvent e) { String inputWord = view.inputText.getText (); if(hashtable.containsKey(inputWord)) { String outputWord = hashtable.get ( inputWord ); view.showText.setText (outputWord ); } else { String chineseWord = inputWord; for (String key : hashtable.keySet()) { String value = hashtable.get(key); if (value.equals(chineseWord)) { view.showText.setText(key); return; } } view.showText.setText ("没有此单词"); } } }把这段代码完善一下,让它能实现汉语翻译为英语,英语也能翻译为汉语,GUI界面不变
完善后的代码如下:
```
package 作业5;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.io.File;
import java.util.HashMap;
import java.util.Scanner;
public class Example13_7{
public static void main( String args []){
WindowWord win = new WindowWord();
win.setTitle("英﹣汉小字典");
}
}
class WindowWord extends JFrame{
JTextField inputText,showText;
WordPolice police;
public WindowWord(){
setLayout(new FlowLayout());
inputText = new JTextField(6);
showText = new JTextField(6);
showText.setColumns(15);
add(inputText);
add(showText);
police = new WordPolice();
police.setView(this);
inputText.addActionListener(police);
setBounds(100,100,400,280);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class WordPolice implements ActionListener {
WindowWord view;
HashMap<String,String> hashtable;
File file = new File("E:\\JAVA\\上机\\作业5\\cet4.txt");
Scanner sc = null ;
WordPolice () {
hashtable = new HashMap<String,String>();
try {
sc = new Scanner(file);
while (sc.hasNext()) {
String englishWord = sc.next();
String chineseWord = sc.next();
hashtable.put(englishWord, chineseWord);
}
HashMap<String,String> reversedHashtable = new HashMap<String,String>();
for (String key : hashtable.keySet()) {
String value = hashtable.get(key);
reversedHashtable.put(value, key);
}
hashtable.putAll(reversedHashtable);
} catch(Exception e ) {}
}
public void setView(WindowWord view) {
this.view = view;
}
public void actionPerformed(ActionEvent e) {
String inputWord = view.inputText.getText();
if(hashtable.containsKey(inputWord)) {
String outputWord = hashtable.get(inputWord);
view.showText.setText(outputWord);
} else {
String chineseWord = inputWord;
for (String key : hashtable.keySet()) {
String value = hashtable.get(key);
if (value.equals(chineseWord)) {
view.showText.setText(key);
return;
}
}
for (String value : hashtable.values()) {
if (value.equals(inputWord)) {
String outputWord = hashtable.get(value);
view.showText.setText(outputWord);
return;
}
}
view.showText.setText("没有此单词");
}
}
}
```
主要的改动在 `WordPolice` 类中,增加了对汉语翻译为英语的处理。在没有找到对应单词时,先按照输入的汉语查找对应的英语单词,如果找到了,就将其翻译为中文输出;如果还没有找到,就按照输入的英语单词查找对应的汉语,如果找到了,就将其翻译为英文输出。如果还是没有找到,就输出提示信息“没有此单词”。
package 作业5; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.; import java.io.File; import java.util.HashMap; import java.util.Scanner; import java.io.File; import java.util.HashMap; import java.util.Scanner; public class Example13_7{ public static void main( String args []){ WindowWord win = new WindowWord(); win.setTitle("英﹣汉小字典"); } } class WindowWord extends JFrame{ JTextField inputText,showText; WordPolice police; public WindowWord(){ setLayout(new FlowLayout()); inputText = new JTextField(6); showText = new JTextField(6); showText.setColumns(15); add(inputText); add(showText); police = new WordPolice(); police.setView(this); inputText.addActionListener(police); setBounds(100,100,400,280); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } class WordPolice implements ActionListener { WindowWord view; HashMap<String,String>hashtable; File file = new File ("E:\JAVA\上机\作业5\cet4.txt"); Scanner sc = null ; WordPolice () { hashtable = new HashMap< String,String >(); //System.out.println(hashtable.size()); try { sc = new Scanner ( file ); //System.out.println(sc); while (sc.hasNext ()) { String englishWord = sc . next (); String chineseWord = sc . next (); hashtable . put ( englishWord , chineseWord ); } HashMap<String,String> reversedHashtable = new HashMap<String,String>(); for (String key : hashtable.keySet()) { String value = hashtable.get(key); reversedHashtable.put(value, key); } hashtable.putAll(reversedHashtable); } catch(Exception e ) {} } public void setView(WindowWord view) { this.view = view; } public void actionPerformed(ActionEvent e) { String inputWord = view.inputText.getText (); if(hashtable.containsKey(inputWord)) { String outputWord = hashtable.get ( inputWord ); view.showText.setText (outputWord ); } else { String chineseWord = inputWord; for (String key : hashtable.keySet()) { String value = hashtable.get(key); if (value.equals(chineseWord)) { view.showText.setText(key); return; } } for (String value : hashtable.values()) { if (value.equals(inputWord)) { String outputWord = hashtable.get(value); view.showText.setText(outputWord); return; } } view.showText.setText ("没有此单词"); } } }我在输入框输入“书”,但结果是没有此单词,但是输入“book”,结果是“n.书,书籍”,如何解决
你的程序中只是将英文单词和对应的中文翻译存储在了HashMap中,没有对输入的中文单词进行处理。所以当你输入“书”时,程序无法匹配到对应的英文单词,因此输出“没有此单词”。
要解决这个问题,你可以在程序中增加一个判断:当输入的单词不是英文单词时,先将其作为中文单词进行匹配。具体来说,可以在actionPerformed方法中增加以下代码:
```java
if(!inputWord.matches("[a-zA-Z]+")) { // 如果输入的单词不是英文单词
for (String value : hashtable.values()) { // 遍历HashMap中的所有中文翻译
if (value.equals(inputWord)) { // 如果找到了匹配的中文翻译
String outputWord = hashtable.get(value); // 获取对应的英文单词
view.showText.setText(outputWord); // 显示翻译结果
return;
}
}
}
```
这段代码的作用是判断输入的单词是否是英文单词(即是否只包含字母),如果不是,则遍历HashMap中的所有中文翻译,找到与输入单词相匹配的中文翻译,并获取对应的英文单词,最后显示翻译结果。
加入这段代码后,你再输入“书”,就能够正确地显示出“n.书,书籍”这个翻译结果了。
阅读全文