我正在编写客户端/服务器应用程序,但实际上找不到符合我需要的指南.在我开始之前,我自己做这件事会让我遇到许多设计缺陷.例如,服务器应该每秒多次更新每个客户端的状态.我假设我不能单独更新每个客户端,但UDP广播应该解决这个问题.但是我仍然需要一个TCP通道来与每个客户端可靠地通信,例如:聊天消息,用户输入等.
研究这个主题似乎服务器可以同时使用这两种协议 - 但只能是可能的(不是敏感的).没有人建议采用这种方法,事实上我从这篇文章中得知,使用这两种方法相当糟糕.
现在我对如何处理服务器中的数据非常困惑.除非我完全误解了丢包的内容,否则我想保证导致'server-request-packets'的用户输入不会丢失.关于保证使用UDP传递的所有关于SO的答案都说使用TCP.更令人沮丧的是,我能想象的每个服务器/客户端程序至少需要保证传递的一些消息(例如'disconnect'消息?).
我应该使用UDP,TCP,还是我只是在想这个问题?
从互联网上的一些 CSS 重置模式中汲取灵感,我想我应该使用一个规则body {line-height: 1}。目前,这导致了我的<input>和<button>元素计算高度不同的问题,尽管字体值相同。示例JSFiddle。我在 Chrome 中遇到了这个问题。
有人能告诉我 Chrome 中这些额外的 2 个像素是从哪里来的吗?可能还有关于使用的任何建议{line-height: 1}?
body {
line-height: 1;
margin: 0;
}
button, input {
font: inherit;
padding: 5px;
width: 50vw;
}
input {
box-sizing: border-box;
}
#row {
display: flex;
}Run Code Online (Sandbox Code Playgroud)
<div id="row">
<button>
18px Chrome, 16px FF
</button>
<input type="text" value="My font is 18px">
</div>
<div id="column">
<button>
My font is 16px
</button>
<input type="text" value="18px Chrome, 16px FF">
</div> …Run Code Online (Sandbox Code Playgroud)我正在尝试创建一个hashmap值的hashmap,其中包含自定义类的不同子类的hashsets,如下所示:
HashMap<String, Hashmap<String, HashSet<? extends AttackCard>>> superMap
Run Code Online (Sandbox Code Playgroud)
AttackCard有子类,如:Mage,Assassin,Fighter.superMap中的每个HashMap只会包含一个包含单个子类的HashSets AttackCard.
当我尝试放一个
HashMap<String, HashSet<Assassin>>
Run Code Online (Sandbox Code Playgroud)
下面是发生错误的代码:
public class CardPool {
private HashMap<String, HashMap<String, HashSet<? extends AttackCard>>> attackPool =
new HashMap<>();
private ArrayList<AuxiliaryCard> auxiliaryPool;
public CardPool() {
(line 24)this.attackPool.put("assassins", new AssassinPool().get());
/* this.attackPool.put("fighters", new Fighter().getPool());
this.attackPool.put("mages", new Mage().getPool());
this.attackPool.put("marksmen", new Marksman().getPool());
this.attackPool.put("supports", new Support().getPool());
this.attackPool.put("tanks", new Tank().getPool());
*/
this.auxiliaryPool = new ArrayList<>(new AuxiliaryCard().getPool());
}
Run Code Online (Sandbox Code Playgroud)
这里有一个AssassinPool get方法的片段:
private HashMap<String, HashSet<Assassin>> pool = new HashMap<>();
public HashMap<String, …Run Code Online (Sandbox Code Playgroud) SELECT *
FROM Residents
WHERE apartment_id IN (SELECT ID
FROM Apartments
WHERE postcode = 2000)
Run Code Online (Sandbox Code Playgroud)
我正在使用sqlalchemy并尝试执行上述查询.我无法使用原始SQL执行它,db.engine.execute(sql)因为它抱怨我的关系不存在...但我使用这种格式成功查询我的数据库:session.Query(Residents).filter_by(???).不过,我无法弄清楚如何用这种格式构建我想要的查询.
有人可以为我解释这行代码吗?
SomeAbstractClass variable = new SomeAbstractClass() { };
这适当地实例化并将抽象实例存储在变量中.怎么了?可能是一个扩展抽象类的匿名类?我可以使用任何关键字查找有关此信息?(如果有任何相关性,抽象类也恰好是通用的)
我有一个使用a的GUI JProgressBar.GUI具有JBUTTONs以下代码:
public void updateProgressBar(int x) {
System.out.println(javax.swing.SwingUtilities.isEventDispatchThread());
healthBar.setValue(x);
}
Run Code Online (Sandbox Code Playgroud)
但我也做了一个循环,定期调用相同的方法.
public class Loop implements Runnable {
public void run() {
while (true) { Thread.sleep(2000); updateProgressBar(0); }
}
}
Run Code Online (Sandbox Code Playgroud)
现在,据我所知,任何改变我的GUI都需要从EDT执行.JProgressBar.setValue(x)更改我的GUI,当从Loop类调用它时,isEventDispatchThread检查失败,这是好的和明白的.然而,我无法理解的是,如果这也意味着我应该使用SwingUtilities.invokeLater()on setValue().我担心的是,因为我不知道setValue()实际上是如何工作的,所以我invokeLater()不必要地使用它,甚至在使用它时破坏了一些东西.
我不知道如何更好地问我的问题:如果我知道改变我的GUI的方法没有从EDT调用,那么我是否也知道我必须使用invokeLater()?
我正在编写一个多线程程序,正在研究是否应该使用volatile我的布尔标志.关于并发性的文档oracle跟踪并没有解释除以下内容memory consistency errors之外的任何内容:
当不同的线程具有应该是相同数据的不一致视图时,会发生内存一致性错误.
假设这些不一致的视图仅在"写入"操作之后发生是有意义的.但是多久之后呢?
例1
Thread A: Retrieve flag.
Thread B: Retrieve flag.
Thread A: Negate retrieved value; result is true.
Thread A: Store result in flag; flag is now true.
Thread B: System.out.print(flag) --> false
Run Code Online (Sandbox Code Playgroud)
由于Thread A并且Thread B同时运行,打印也可能导致true,具体取决于检索的时间flag.对于不一致而言,这是完全合理的.
但是memory consistency errors描述的方式(写入变量不一定反映在其他线程中)听起来这也是如此:
例2
Thread A: Retrieve flag.
Thread A: Change retrieved value; result is true.
Thread A: Store result in flag; flag is now true. …Run Code Online (Sandbox Code Playgroud) 所以我有一个非常大的java应用程序,我一年前写的,我想再次理解它.我正在查看代码中的一个方法,其中存在明显的获取NoSuchElementException的风险:我在一个用任意字符串构造的扫描器变量上调用.next().声明抛出该方法的唯一方法是定制的Exception子类.危险命令也不是写在catch-block中.代码编译和工作正常,当我以这样的方式使用我的gui它应该抛出NoSuchElementException没有任何反应:O
作为测试,我在代码中编写了一个catch-block,编译它,运行gui并使它再次抛出NoSuchElementException,应用程序成功捕获异常并采取相应的行动.如何在不指定此异常的情况下编译代码可能会被抛出?如果它完全没用,这里是没有catch-block的代码:
public static Expression interpret(final Scanner scanner)
throws
InvalidPosition,
NoSuchSpreadsheet,
IllegalStartOfExpression,
InvalidExpression,
FalseSyntax,
InvalidRange {
String keyword = null;
try {
keyword = scanner.next();
} catch (NoSuchElementException e) {
throw new IllegalStartOfExpression();
}
switch(keyword) {
case "Get":
Position pos = PositionInterpreter.interpret(scanner.next());
Expression expression = Application.instance.get(pos);
if (expression instanceof Text) {
System.out.println("Failure");
} else { System.out.println("Success"); }
return new Text(expression.toString());
case "Int":
return new Int(
scanner.nextInt());
Run Code Online (Sandbox Code Playgroud)
如您所见,该方法只是假设在检查是否存在至少一个单词后,扫描仪中有多个单词.我怎么逃避编译呢?
我有一个实例化的File对象.我知道它包含图片格式.我不知道文件放在系统的哪个位置,除了File我可用的方法getPath(), getAbsolutePath()等.
我的问题是:如何用我Image的图片实例化一个JavaFX 对象File?
我有一个超类'BuildingMaterial'和大量子类,即Stone,Wood,Clay等.所有子类的行为都相似:1个int字段,以单位形式存储建筑材料的数量.它们可以构造为无参数或带有int.我已经知道BuildingMaterial的所有子类都有这两个构造函数,我如何避免将它们编码到每个类中?这是我不想在每个课程中做的一个例子:
public final class Stone extends BuildingMaterial {
private int amount;
//constructors
public Stone() {
amount = 0;
}
public Stone(int i) {
amount = i;
}
//methods
public int getAmount() {
return amount;
}
}
Run Code Online (Sandbox Code Playgroud) 
我正在尝试编写JQuery以item ui-draggable...根据突出显示的元素的值删除所有与类的分区.例如,检查值是否小于100,如果为true,则删除除法.但是,我不知道该怎么做.所有部门的结构都是一样的.相关数字将始终包含在要删除的部门的第6个子元素中.
所以在伪代码中我想写这个:
$(document).ready(function(){
for each division of class .item ui-draggable... {
if (value of relevant number < 100) {
.remove(division);
}
}
});
Run Code Online (Sandbox Code Playgroud) 对于getFirstFromEnum下面的方法,返回的enum类型始终是作为参数传递的类.考虑到这一点,无论如何我可以改变方法,以避免每次调用它时进行投射?
private <E extends Enum<?>> Enum<?> getFirstFromEnum(Class<E> enumClass) {
return enumClass.getEnumConstants()[0];
}
EnumA foo = (EnumA) getFirstFromEnum(EnumA.class); //can I change method to avoid casting?
Run Code Online (Sandbox Code Playgroud) java ×9
css ×2
generics ×2
broadcast ×1
constructor ×1
exception ×1
file ×1
firefox ×1
hashmap ×1
html ×1
inheritance ×1
javafx ×1
javascript ×1
jprogressbar ×1
jquery ×1
memory ×1
path ×1
python ×1
sqlalchemy ×1
swing ×1
tcp ×1
udp ×1
volatile ×1